V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
Colorful
V2EX  ›  MySQL

请教下数据库取出乱码,怎么解决?

  •  
  •   Colorful · 2019-09-01 20:05:36 +08:00 · 4451 次点击
    这是一个创建于 1910 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前端一枚,刚接触 mysql 不久 这是数据库,内容,数据库显示的是汉字

    CREATE TABLE llbook ( Fid int(11) NOT NULL AUTO_INCREMENT, Ftitle varchar(255) DEFAULT '0' COMMENT '标题', Fimg varchar(255) DEFAULT '' COMMENT '默认图片', Fprice int(11) DEFAULT '0' COMMENT '商品价格', PRIMARY KEY (Fid) ) ENGINE=MyISAM AUTO_INCREMENT=1392 DEFAULT CHARSET=utf8

    这是 HTML

    <meta charset="utf-8"> <meta content="webkit" name="renderer"> <meta content="IE=edge" http-equiv="X-UA-Compatible"> <meta content="width=device-width, initial-scale=1" name="viewport"> <title>Home</title> <meta content="" name="keywords"> <meta content="" name="description">

    但是显示页面之后就乱码?请教下,是哪里出的问题?

    11 条回复    2019-09-02 12:24:17 +08:00
    taogen
        1
    taogen  
       2019-09-01 20:22:30 +08:00 via Android
    1. debug 看下后端取出的是不是正确汉字,如果后端取出来是正确的,2. 看下 HTTP response 设置的编码。
    Colorful
        2
    Colorful  
    OP
       2019-09-01 20:23:54 +08:00
    @taogen 我直接用 PHP 文件读取的数据库,数据库里面是中文,然后取出来之后是乱码
    taogen
        3
    taogen  
       2019-09-01 20:28:29 +08:00 via Android
    试下在 php 代码中添加 header
    <?php
    header("content-type: text/html; charset=utf-8");
    Colorful
        4
    Colorful  
    OP
       2019-09-01 20:56:30 +08:00
    @taogen 试过,还是乱码,会不会跟导入的数据有关系?但数据库里面显示的是中文
    jinliming2
        5
    jinliming2  
       2019-09-01 20:58:14 +08:00 via iPhone
    1、检查数据库存储的编码,印象中 MySQL 好像不是默认 UTF-8 (多年不用不太记得了)
    2、检查 HTTP 响应头,Content-Type 后面是否指定了 charset 编码,指定的编码是否与数据一致?目前推荐是统一 UTF-8,数据库用 UTF8-MB4。
    如果 HTTP 响应头没有指定编码,那么 HTML 里指定的编码才会生效,否则 HTTP 响应头的编码会覆盖 HTML 里的 meta 指定的编码。
    可以装个浏览器扩展“ Charset ”调一下看看正确的编码是哪个(国内一般都是 UTF-8、GBK 搞混)。
    Colorful
        6
    Colorful  
    OP
       2019-09-01 22:23:35 +08:00
    @jinliming2 有装 Charset,还是乱码
    Colorful
        7
    Colorful  
    OP
       2019-09-01 22:49:44 +08:00
    问题解决了,谢谢大家
    在数据读取的时候,加了这个代码就没问题了
    $conn->query("SET NAMES 'UTF8'");
    hantsy
        8
    hantsy  
       2019-09-02 09:03:55 +08:00
    十几年了一直用 UTF8,没出现过什么乱码。
    MySQL 可以改默认编码:
    1. 直接修改配置文件。
    2. 连接时数据库 URL 加编码参数。
    xmai
        9
    xmai  
       2019-09-02 09:51:15 +08:00


    在 mysql 数据库中,server,database 的字符集都默认是 latin1
    在创建表的时候需要指定字符串
    create table user(name varchar(11)) default charset=utf8;

    或者修改默认字符编码


    直接修改 mysql 配置文件 /etc/my.cnf 也行

    ```
    [mysqld]
    character-set-server=utf8
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    ```
    Colorful
        10
    Colorful  
    OP
       2019-09-02 12:24:05 +08:00
    @xmai 涨知识了,感谢
    Colorful
        11
    Colorful  
    OP
       2019-09-02 12:24:17 +08:00
    @hantsy 明白了,太感谢了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1098 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 18:58 · PVG 02:58 · LAX 10:58 · JFK 13:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.