深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