IT Notes‎ > ‎Database‎ > ‎MySQL‎ > ‎

MySQL Server 安装后的字符集设置

MySQL 支持非常多的字符,但配置不当,程序乱码也很头疼。

RHEL

RedHat 的配置和 Debian 系稍微有些不一样,哥开始也头疼了一会。后来在按照 http://guichina.blog.51cto.com/2001125/724939(by guichina) 修改成功,记录如下:

  • OS: Red Hat 4.1.2-46
  • mysql: Ver 14.14 Distrib 5.5.28

具体设置步骤如下:

1. /etc/my.cnf 默认是少配置的,需要手工复制过来:
         cp /usr/share/mysql/my-large.cnf /etc/my.cnf
2. 编辑 my.cnf ,
    在 [client] 下添加:
         default-character-set=utf8
    在 [mysqld] 下添加:
         character-set-server=utf8
    注,原文建议是三行:
     default-storage-engine=INNODB
     character-set-server=utf8
     collation-server=utf8_general_ci
3. 设置完成后,重启生效
    /sbin/service mysql restart

Ubuntu

按:有关如何在 Ubuntu 12.04 上设置,当时设置结束后没有立刻记笔记,这里有些记不清了,需要日后在碰到时,积极补充的。

在 Ubuntu 上通过 apt 安装的 MySQL,在安装过程中没有字符集设置的步骤,这就需要在安装后补上,否则会出现恼人的乱码问题,中文数据全变成问号了。

具体设置方法如下:

在 /etc/mysql/my.cnf 文件中的[client]段和 [mysqld]段添加以下两行黑体内容:
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
以上设置针对5.1.3以前的版本有效,5.1.3之后,则需要添加下面的内容:
character_set_server=utf8
OK,重启一下数据库(/etc/init.d/mysql restart)。再来看一下系统的支持的编码:

mysql> show variables like 'character%';
+--------------------------+----------------------------+
| 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     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.35 sec)

以上指令执行后,发现  character_set_database 的字符集还不是 utf8,可以执行下面的命令:
mysql> set character_set_database=utf8;
Query OK, 0 rows affected (0.22 sec)
注:这种方法其实是有去瑕疵的,只是在当前会话有效,退出登录或者重启 mysql 或重启系统后,就失效了,根本的解决方法还是改配置文件。

还是来一张截图,比较生动:
一般可用下面两条命令查看编码支持情况:
show variables like 'character_%';
show variables like 'collation_%';

其他

单独设置某个数据库:
    alter database testdb character set utf8;

查看mysql支持的编码:
    show character set;


参考

  1. 【转】 Ubuntu下MySQL中文乱码解决 zz
  2. MySQL查询出现乱码解决方案
Comments