mysql之字符编码问题

Posted 言止予思

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql之字符编码问题相关的知识,希望对你有一定的参考价值。

mysql编码分为服务端编码和客户端编码两大类
字段编码, 表编码, 数据库编码这些编码都属于服务端编码,服务端编码决定你可以存哪些字符以及这些字符要哪种规则排序.字段编码优先级最高. 

你插入用什么码属于客户端编码, 你用什么客户端编码都无所谓,只要插入前加个命令set names xxx 就可以了,mysql都会给你转换,你考虑只是客户端编码和服务端编码大小集问题,是否存在映射.(比如服务端编码为GB2312, 客户端编码为BIG5, mysql肯定转换不了)
如果要正常显示字符,客户端编码xxx要和你应用程序的环境编码相同, 否则会无法正常显示(出现乱码), 这是mysql新用户最大的困扰.

 

问:你所说的mysql都会去转换是什么意思?比如我客户端set names ‘utf8‘,表编码为gb2312,这样是不会被正确转换的吧?

答:他会转换啊, 但如果字符无法映射, 他也转换不了, 只能用?代替或省略, 如客户端utf8中的繁体字, 是存不到编码为gb2312的字段里.
set names xxx 好比告诉mysql服务器: "我这边的编码为xxx, 请帮忙帮我转换一下编码"
所以set names xxx很重要, 你不能选错, 一定要和你应用程序的字符环境相同. 

以上是关于mysql之字符编码问题的主要内容,如果未能解决你的问题,请参考以下文章

mysql之字符编码问题

mysql之全球化和本地化:字符集校对集中文编码问题

MySQL对JSON类型UTF-8编码导致中文乱码探讨

django管理数据库之中文字符编码问题

MySQL之字符集-校对规则

MySQL字段类型