MySQL乱码的缘由和设定UTF8数据格局的办法介绍
MySQL运用时,有一件很疼痛的事情确定是效果乱码。将编码格局都设定为UTF8可以解决这个题目,我们今天来说下为何要这么设定,以及怎么设定。
MySQL字符格局
字符集
在编程说话中,我们为了防止中文乱码,会运用unicode对中文字符做处置,而为了落低网络带宽和节俭存储空间,我们运用UTF8进行编码。对这两者有什么不一样不足理解的同窗,可以参照 Unicode字符集和UTF8编码编码的前世今生这篇文章。
一样在MySQL中,我们也会有这样的处置,我们可以查看目前数据库设定的编码方式(字符集):
mysql> show variables like '%char%'; +--------------------------+----------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/charsets/ | +--------------------------+----------------------------------+ 8 rows in set (0.00 sec)
表中就是目前设定的字符集,先看不消关注的几个值:
character_set_filesystem | binary:文件系统上的存储格局,默许为binary(二进制)
character_set_system | utf8:系统的存储格局,默许为utf8
character_sets_dir | /usr/local/mysql/share/charsets/:可以运用的字符集的文件途径
剩下的几个就是日常影响读写乱码的参数了:
- character_set_client:客户端要求数据的字符集
- character_set_connection:从客户端接收到数据,然后传输的字符集
- character_set_database:默许数据库的字符集;要是没有默许数据库,运用character_set_server字段
- character_set_results:效果集的字符集
- character_set_server:数据库办事器的默许字符集
MySQL中的字符序名称遵从命名惯例:以字符序对应的字符集名称开头;以_ci(表示大小写不敏锐,case insensitive)、_cs(表示大小写敏锐,case sensitive)或_bin(表示按编码值比拼,binary)结尾。例如:在字符序“utf8_general_ci”下,字符“a”和“A”是等价的;
因而字符序不一样于字符集,用于数据库字段的相称或大小比拼。我们查看MySQL实例设定的字符序:
mysql> show variables like 'collation%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | latin1_swedish_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+ 3 rows in set (0.00 sec)
跟utf8对应的常用字符序是:utf8_unicode_ci/utf8_general_ci和utf8_bin等,那么他们的区别有哪些呢?
1、_bin是用二进制存储并比拼,区别大小写,存储二进制内容时运用
2、utf8_general_ci:校对速度快,但正确度稍差,运用中英文时运用
3、utf8_unicode_ci:正确度高,但校对速度稍慢,运用德法俄等外语时运用
细致的区别可以参照 Mysql中的排序法则utf8_unicode_ci、utf8_general_ci的区别总结。
修改字符集和字符序
要是在MySQL连贯时,涌现了乱码的题目,那么根本可以肯定是各个字符集/序设定不同一的缘由。MySQL默许的latin1格局不支撑中文,因为我们在中国,所以选中对中文和各说话支撑都非常完美的utf8格局。所以,我们需要将需要关注的字符集和字符序都修改为utf8格局。
你也可以选中utf8mb4格局,这个格局支撑保留emoji
以上就是MySQL乱码的缘由和设定UTF8数据格局的办法介绍的细致内容,更多请关注 百分百源码网 其它相干文章!