› 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 · Sep 1, 2019 · 5189 views
    This topic created in 2597 days ago, the information mentioned may be changed or developed.

    前端一枚,刚接触 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 replies  •  2019-09-02 12:24:17 +08:00
    taogen
        1
    taogen  
       Sep 1, 2019 via Android
    1. debug 看下后端取出的是不是正确汉字,如果后端取出来是正确的,2. 看下 HTTP response 设置的编码。
    Colorful
        2
    Colorful  
    OP
       Sep 1, 2019
    @taogen 我直接用 PHP 文件读取的数据库,数据库里面是中文,然后取出来之后是乱码
    taogen
        3
    taogen  
       Sep 1, 2019 via Android
    试下在 php 代码中添加 header
    <?php
    header("content-type: text/html; charset=utf-8");
    Colorful
        4
    Colorful  
    OP
       Sep 1, 2019
    @taogen 试过,还是乱码,会不会跟导入的数据有关系?但数据库里面显示的是中文
    jinliming2
        5
    jinliming2  
       Sep 1, 2019 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
       Sep 1, 2019
    @jinliming2 有装 Charset,还是乱码
    Colorful
        7
    Colorful  
    OP
       Sep 1, 2019
    问题解决了,谢谢大家
    在数据读取的时候,加了这个代码就没问题了
    $conn->query("SET NAMES 'UTF8'");
    hantsy
        8
    hantsy  
       Sep 2, 2019
    十几年了一直用 UTF8,没出现过什么乱码。
    MySQL 可以改默认编码:
    1. 直接修改配置文件。
    2. 连接时数据库 URL 加编码参数。
    xmai
        9
    xmai  
       Sep 2, 2019


    在 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
       Sep 2, 2019
    @xmai 涨知识了,感谢
    Colorful
        11
    Colorful  
    OP
       Sep 2, 2019
    @hantsy 明白了,太感谢了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5627 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 91ms · UTC 01:37 · PVG 09:37 · LAX 18:37 · JFK 21:37
    ♥ Do have faith in what you're doing.