mysql字符集有关的变量有下面几个:
client character set: 客户端发送给服务器时采用的字符集
connection character set: 内部连接上的字符集
result character set: 服务器返回给客户端的结果采用的结果集
server character set: 数据库服务器的字符集
db character set: 数据库的字符集
column character set: 字段的字符集
前面3个字符集都是与连接上的数据传输有关的字符集
后面3个字符集都是服务器内部的字符集,主要是创建数据库,创建表时有影响
例如: 创建数据库时,没有指定字符集,则继承服务器的字符集
数据库的字符集会影响库中的所有表
创建表时,如果没有指定字符集,则继承数据库的字符集
连接有关字符集中的connection字符集在转到内部处理时,还是要转到内部的字符集,内部字符集
就是表的字符集,列的字符集,当输出结果时,会再需要将内部字符集转换为result character set
result character set客户端不是协商完成,但是传输层面的3个字符集可以通过一个set names utf8
来统一3个字符集变量
本地控制台的字符集通过my.cnf中的client的字符集设置
外部机器的client character set 是客户端与服务器交互时协商
如果数据库和表的字符集是latin1时,而传输上用的是utf8,由于数据存储时,latin1最大占1个字节,中文存储不了,即使外围用utf8还是会乱码
如果result character set与客户端本地的不匹配,也会出现乱码
当然编码统一后,减少了每个环节的转换开销
阅读(895) | 评论(0) | 转发(0) |