linux(Ubuntu)下mysql字符集完美解决

  本文参考:

  1. http://www.blogjava.net/wldandan/archive/2007/09/04/142669.html

  2. http://chinaapp.sinaapp.com/thread-2610-1-1.html

  3. http://dev.mysql.com/doc/refman/5.1/zh/charset.html

  参考博客中[1]讲明了mysql字符集的设定原理。

1.MySQL默认字符集
  MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。默认的配置从何而来呢?
    (1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
    (2)安装MySQL 时,可以在配置文件 (my.cnf[linux] my.ini[windows]) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;
    (3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集;
    (4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server;
    (5)当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;
    (6)在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;
    (7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;

 网上很多博客中说明的使用命令的方式修改默认配置,大多无效或者好一点仅对当前有效。mysql的服务器进程启动后很难对可能已经在使用的数据表进行更改。

 所以还是应该更改配置文件my.cnf的内容比较科学。参考[2],可以在my.cnf文件加入

1、在[client]字段里加入default-character-set=utf8,如下:

[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8

2、在[mysqld]字段里加入character-set-server=utf8,如下:

[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
character-set-server=utf8

3、在[mysql]字段里加入default-character-set=utf8,如下:

[mysql]
default-character-set=utf8

   在大多数情况下,mysql的安装选择了多语言支持的安装方式,所以步骤3去掉有可能也行。

 不过,我个人不太建议使用这种方式。看看/etc/mysql/my.cnf文件的最后一句“!includedir /etc/mysql/conf.d/” ,这表示该配置外部引入文件。所以可以在/etc/mysql/conf.d/目录下建一个charset.cnf文件

//charset.cnf

#this file is created by Karlvin for compatibiliy with Chinese Charset.
[client]
default-character-set   = utf8

[mysqld]
character-set-server    = utf8

[mysql]
default-character-set   = utf8

  或者在my.cnf里加入!include FILENAME,然后将上面的内容写在FILENAME里。

  最后输入sudo /etc/init.d/mysql restart。让数据库重启,配置生效。

 

posted on 2014-04-04 16:35  男神发量  阅读(307)  评论(0编辑  收藏  举报