MySQL的字符集有多个级别,它们将
中文存储在MySQL中。如果你不能
正确地
设置字符集,很容易获取数据乱码。今天,有一个
用户反馈在自己的数据库中的数据在1 p.m.here,我
分享了调查的具体问题和
解决方案的过程。
(1)排除由客户端设置引起的乱码的
显示。
如果用户设定的MySQL character_set_client不与字符集由客户端显示的一致,很容易导致中国数据紊乱。
设置设置为utf8的字符:会话SET NAMES UTF8,设置设置为UTF8客户端显示字符,然后从表中选择随机码数据。
结果表明,当character_set_client与客户端的字符集一致,仍有乱码,不包括用户显示字符集不正确的可能性。下面是六(item_title)专栏看到列是否是正确的在存储字符的底部设置。
通过上面的
查询,我们可以
确认数据混乱代码不是问题,但是存储的数据内容本身是
错误的。
(2)混沌码定位的
原因 1 >用户确认记录可以显示当它被插入,但后来更新后,数据被搞砸了。根据这一信息,找到对应的binlog正确内容的更新语句。
的binlog日志上面显示该SQL更新原始数据库的正确内容变成一堆乱码,导致数据库中数据的存储。
从binlog日志,你可以看到,当更新更新,这是写在拉丁语的数据库内容的item_title场SET语句后面的更新是乱码,所以确认导入数据源本身,使更新的数据与用户的困惑。确认更新UPDATE语句,是第一个从加载库,更新后拼接成SQL,所以负载出可疑数据已经是乱码,那么错误的数据来更新原有的正确数据的直接使用,导致所有正确的数据代码。因此,你需要确认是否更新导入的数据源是正确的,那就是,无论数据的负载是正确的。
2 >导入数据源验证
打开实例的完整日志开关,然后比较日志,从相应更新语句中
运行的SQL中找出数据导出语句和相应的字符集设置。
从上面的日志内容中可以看到,该
连接是在没有任何字符集的
情况下设置的,内容是直接从数据库中选择的:
即,输出将在latin1格式显示。在
默认字符集
配置,选择` main_table `。* ` promo_item `为手动运行` main_table `哪里promo_item_id = '500186324'command可以设置为latin1的character_set_results
发现,item_title的输出是一个问号。
因为latin1不能正确代表
汉字,它显示为一串问号。用户直接共享内容更新的原始内容,从而导致内容的存储。
(3)摘要
当使用MySQL存储汉字时,我们需要注意以下几点:
1 >确认更新数据源设置MySQL的会话级别的性质相一致,和会话级字符集可以通过设置名称charset_name设置。
2、如果你想显示中文正常,你需要设置character_set_results到GBK或UTF8。同时,设置客户需要的character_set_results配置一致的显示字符。