MySQL默认字符编码设置

选项说明
character_set_client
这是用户告诉MySQL查询是用的什么字符集。

character_set_connection
MySQL接受到用户查询后,按照character_set_client将其转化为character_set_connection设定的字符集。

character_set_results
MySQL将存储的数据转换成character_set_results中设定的字符集发送给用户。

Comsenz Discuz! 并没有使用set NAMES character
SET NAMES ‘x’语句与这三个语句等价:
mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET character_set_connection = x
而 Comsenz Discuz! 里面是
@mysql_query(“SET character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary”, $this->link);

SET character_set_client = binary;
使用二进制字符集查询

此三处的字符设定很大程度上会解决乱码问题,那么着三个设定具体有什么作用呢?
character_set_client
指定的是Sql语句的编码,如果设置为 binary,mysql就当二进制来处理,character_set_connection 指定了mysql 用来运行sql语句的时候使用的编码,也就是说,程序发送给 MySQL 的 SQL 语句,会首先被 MySQL 从character_set_client 指定的编码转换到 character_set_connection 指定的编码,如果 character_set_clien 指定的是 binary,则 MySQL 就会把 SQL 语句按照 character_set_connection 指定的编码解释执行。

当执行SQL语句的过程中,比如向数据库中插入字段的时候,字段也有编码设置,如果字段的编码设置和 character_set_connection 指定的不同,则 MySQL 会把插入的数据转换成字段设定的编码。SQL语句中的条件判断和SQL插入语句的执行过程类似。

当SQL执行完毕像客户端返回数据的时候,会把数据从字段指定的编码转换为 character_set_results 指定的编码,如果 character_set_results=NULL 则不做任何转换动作,(注意这里设置为NULL不等于没有设置,没有设置的时候MySQL会继承全局设置), 工作中比较有用的就是利用MySQL进行转码、不同编码的数据库之间共用数据。

选项配置
配置文件路径:/full/path/mysql/bin/my.ini (或者 my.conf )

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect=’SET collation_connection = utf8_unicode_ci’
init_connect=’SET NAMES utf8′
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

注意:
在 mysqld 中使用 default-character-set 设置, mysql 启动会报错而无法启动。

参考文献
http://dev.mysql.com/doc/refman/5.5/en/charset-configuration.html
http://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf8-in-my-cnf
http://www.iteye.com/problems/11006
http://jianzhong5137.blog.163.com/blog/static/98290492010821115435501/
http://www.itpub.net/thread-1187897-1-1.html
http://imysql.cn/?q=node/20

《MySQL默认字符编码设置》有1个想法

注意:
在 mysqld 中使用default-character-set设置, mysql 启动会报错而无法启动。
default-character-set 设置到[mysql]或[client]节点中能生效。

Daler进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注