昨天准备把项目部署到linux,在初始化项目数据库时碰到了烦人的字符集问题,刚开始忘记了设置,因为默认是latin1,所有中文都成了?,于是按照网上的方法更改了/etc/my.cnf里的字符设置utf8,在DOS下使用insert int 插入一条中文记录,发现还是乱码,写个测试类插入却发现无法插入,'\UX\WE\',似乎还是编码的问题,早上到MySQL官网上查资料,换了好几个配置的组合都没有解决问题,终于在drop database后重建才解决了插入中文失败的问题。
现在总结一下,官网的资料:http://dev.mysql.com/doc/refman/5.1/zh/charset.html#charset-server
服务器字符集和校对规则可以用作character_set_server和collation_server系统变量的值
数据库的字符集和校对规则可以用作character_set_database和 collation_database系统变量
-----------------------------------------------------------------------------------------------------------------------
当查询离开客户端后,在查询中使用哪种字符集?
服务器使用character_set_client变量作为客户端发送的查询中使用的字符集。
服务器接收到查询后应该转换为哪种字符集?
转换时,服务器使用character_set_connection和collation_connection系统变量。它将客户端发送的查询从character_set_client系统变量转换到character_set_connection
character_set_results变量指示服务器返回查询结果到客户端使用的字符集。
对于mysql客户端,如果你希望使用与默认字符集不同的字符集,不需要每次启动时执行SET NAMES语句。可以在mysql语句行中或者选项文件中添加一个--default-character-set选项设置。例如,你每次运行mysql时,以下的选项文件设置把三个字符集变量修改为koi8r:
[mysql]
default-character-set=koi8r
--------------------------------------------为项目配置字符集-------------------------------------------
为项目配置MySQL的/dtc/my.cnf文件
[client]
default-character-set = gb2312 # 在XP下用putty登陆时select可显示中文
[mysqld]
default-character-set = utf8 # 项目环境为UTF8,一般linux环境也这么设置
#等于设置了character_set_database / character_set_server = utf8
[mysql]
default-character-set = gb2312 # XP下my.ini此项也这么设置,可以正常显示,影响以下三个设置
#等于设置了character_set_client character_set_connection character_set_results=gb2312
------------------------效果-------------------------------
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | gb2312 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+