mysql命令行下显示中文乱码的问题

      使用 phpMyAdmin 创建数据库,并设置了字符集为 utf8-general-ci, 从数据库读取内容并展示到以 utf-8 为字符集的页面中显示为正常。但是使用 mysql 客户端命令连接到数据库,并使用 SELECT 语句显示条目时,遇到中文就会输出乱码,这是由于 mysql 客户端在查询时并未指定字符集编码,在安装mysql后缺省字符集为 latin1,我们可以在 mysql 客户端中输入以下命令查看缺省字符集:

    mysql> show variables like '%char%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | latin1                     |
    | character_set_connection | latin1                     |
    | character_set_database   | latin1                     |
    | character_set_filesystem | binary                     |
    | character_set_results    | latin1                     |
    | character_set_server     | latin1                     |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)

    可以使用以下命令要求 mysql 服务器在返回查询数据时以指定的字符集返回:

    mysql> set names utf8;
    mysql> show variables like '%char%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8                       |
    | character_set_connection | utf8                       |
    | character_set_database   | latin1                     |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8                       |
    | character_set_server     | latin1                     |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)

    若数据库表结构中字符串均以 utf8 格式存储,则经过 "set names utf8;" 的设置后,查询结果中的中文便不会出现乱码。

    每次客户端连接时,都要通过命令 "set names utf8;" 来手动设定,其实可以在服务端设置将每一个新的连接到来时都执行一条查询命令,以此来达到自动设定的目的。

    我们可以在 my.cnf 文件中的 [mysqld] 节下新增内容,如下:

    # vim /etc/my.cnf
    [mysqld]
    init_connect='SET NAMES utf8'
    # service mysqld restart

    再次通过 mysql 客户端连接至服务器,并使用 show variables like '%char%'; 便可看到修改后的内容了。

作者:Lory | 时间:2015-04-19 16:03:27 | 分类:开发工具 | 浏览:457 | 评论:0