mysql 数据库编码怎么样正确设置

前不久,在公司内部对技术人员培训中,发现部分员工对mysql编码规则认识不清晰,不了解mysql服务端、客户端的编码字符集应该怎么样正确设置。

于是重新讲解一次,此文章依据当时的内容所写。
一.mysql通过 SHOW VARIABLES 查看mysql正在使用的字符集环境变量,这些环境变量之间有什么区别和联系呢?
mysql字符集编码大致可以分为四类:
1. mysql服务端即 mysqld 服务端进程所使用的编码:
character_set_database
character_set_server
2. mysql 客户端使用的编码,即告知mysql服务端 ,客户端使用的编码:
character_set_client
character_set_connection
character_set_results
3.mysql 比对方法,即数据结果集如何排序,比较大小
collation_connection
collation_database
collation_server
4. mysql 内置存储编码,即表名称、字段名称等数据的存储编码:
character_set_system
此环境变量值是只读的,不可以改变.
二.mysql 一般如何配置编码服务端、客户端编码字符集?
1.在my.ini里配置.
default-character-set=utf8,告知mysql,客户端使用的编码.此配置项在mysql.exe 客户端是有效的,其他客户端不一定适用。
此配置确定的环境变量类型见图片:

default-character-set确定环境变量的类型

character-set-server=utf8,决定服务端创建表、存储数据、数据比较排序等操作时默认使用的编码字符集.
此配置确定的环境变量类型见图片:

character-set-server确定环境变量的类型

2. 客户端链接mysql验证成功后,还可以使用set names [编码字符集名称]。告诉mysql,你的客户端使用的编码类型。
建议:php链接mysql成功后执行一次 set names [编码字符集名称] ,保证mysql服务端可以正确处理php端的编码。
3.是否可以客户端不指定编码字符集?

此问题等价于:

character-set-server确定服务端,客户端的编码字符集.

为character_set_client…等客户端编码字符集的环境变量设置默认值

可以,设置:skip-character-set-client-handshake = 1即可。
例如:在 my.cnf 里,同时设置
default-character-set=gbk
character-set-server=utf8
skip-character-set-client-handshake = 1
 mysql会忽略 default-character-set=gbk 配置项,
 character_set_client
character_set_connection
character_set_results
collation_connection
这几项的值都依然是utf8.
4.如果客户端的内容编码与mysql服务端设置不一致,如何处理?
参考第二条,以php为例:如果你的页面是gbk编码,数据库字符集是utf8,可以调用set names gbk.这样mysql就可以正确处理你提交的内容,并以gbk编码格式返回查询结果集,

作者: 白金马桶

天道酬勤...

发表评论