深MySQL字符集设置
MySQL客户机和MySQL服务器之间有一个字符集转换器。character_set_client = > GBK:转换器知道客户在GBK格式发送代码
character_set_connection = > GBK:将由客户端发送到GBK格式的数据
character_set_results = > GBK:
注:以上三个字符集可以通过设置GBK设置
例子:
创建表测试(
varchar(64)非空名
字符集utf8;#)在utf8表示字符编码服务器
首先,将数据插入到数据表测试中
惰性成测试值(测试);
然后,数据测试存储在数据库中的utf8格式
过程:
首先,通过MySQL客户端,将数据发送给MySQL服务器,字符集转换后,因为character_set_connection值GBK,所以客户端将数据发送到GBK格式,由字符集转换将数据发送到服务器,使服务器与UTF8存储数据。在其内部,将被自动转换成GBK UTF8格式的数据
什么时候会有随机代码
客户端的数据格式与申报character_set_client一致
标题('content-type:文本/ HTML;字符集= utf8);客户数据转换成UTF8格式,当数据通过字符集转换由于character_set_client = GBK,和character_set_connection等于GBK,所以来自客户端的数据(UTF8编码格式),将无法转换格式。
然而,当字符集转换将数据发送到服务器,发现服务器的格式是UTF8,所以它将进程的当前数据为GBK格式转化成UTF8,但是这一步实际上是错误的。
2。当结果与客户端页面不符时
对返回结果的格式设置为UTF8,但客户接受格式GBK,所以会有一个随机码
通过显示字符集语法,可以显示所有可用字符集。
拉丁字符集
注:本maxlen列显示了用来存储一个字符的最大字节数。
utf8的字符集
GBK字符集
数据什么时候会丢失
相比上面的三张图片,它是已知的,用于存储一个字符的最大字节数在每个字符集不同,与最大UTF8和最小拉丁。所以在一个字符集转换的情况下,如果不妥善处理,数据将丢失,无法找回。
例如:
当character_set_connection值改为Lantin
从客户端发送的数据将被转换成GBK lantin1格式,因为在GBK格式的数据会占用更多的字符,从而导致数据丢失。
总结:
正常情况下character_set_client和character_set_results应该是一致的,因为一个客户端发送一个数据格式,另一个说数据格式被客户端为了避免数据的丢失,字符编码字符编码为character_set_connection大于character_set_client