字符集和比较规则
我们创建一个数据库,指定字符集及其比较规则的sql如下
createdatabaseDB
charactersetgb
collategb_chinese_ci;
上面建库sql中字符集就是characterset而比较规则则是collate
mysql中字符集和字符集的比较规则是相互联系的,如果只修改了字符集,那么相应的字符比较规则也会跟着被修改,反过来如果只修改字符比较规则,那么对应的字符集也会跟着变化。
如果修改字符集,则比较规则会变成修改后字符集默认的比较规则
如果修改比较规则,则字符集会变成比较规则对应的字符集
字符集转换
从客户端发生请求到服务器本质上是发送指令本质上就是发送字符串,而字符串会被转换成二进制,服务器接收指令后获取数据返回给客户端,在这过程中有三个系统变量我们需要注意
character_set_client:服务器解码使用的字符集
character_set_connection:
服务器处理请求时候会把character_set_client的字符集转换成character_set_connection的编码字符集
character_set_resultes:服务器向客户端返回数据的字符集
首先我们建议这三个字符集要统一,linux下默认是utf8格式,这样出现乱码时候可以在连接字符串中指定连接字符集。另外也可以减少mysql在客户端和服务器直接来回转换的工作。我们可以使用set来将这三个变量进行设置
SETcharacter_set_client=字符集名;
SETcharacter_set_connection=字符集名;
SETcharacter_set_results=字符集名;
如果想永久的设置也可以在mysql配置中进行配置
[client]
default-character-set=utf8