标签:编码 convert code latin1 UTF8 乱码 using name
背景:目前正在进行业务重构,需要对使用MySQL的业务库表进行重新设计,在迁移时,遇到了中文字符乱码问题(源库表的默认编码是LATIN1,新库表的默认编码为UTF8),故重新学习了下MySQL编码和解码相关知识,并整理了在遭遇乱码时的一些常用技巧。
比如我下面一张表是省市区的编码存储,导入之后数据库变成如下的乱码:
这个实际上是latin1字符编码。
如果我们直接查的话,那么需要转换一下:
select id,parent_code,area_code,CONVERT(CAST(CONVERT(name USING LATIN1) AS BINARY) USING UTF8) from cnarea_2020 where parent_code ='110000000000' or parent_code ='110101001000'
可以看到如下:
已经转成tf8的编码了,已经正常了!
如果我们要使用查询的字段里面包含乱码,我们可以这样使用:
select * from (select id,parent_code,area_code,CONVERT(CAST(CONVERT(name USING LATIN1) AS BINARY) USING UTF8) as name from cnarea_2020 where city_code ='010') as t where t.name like '%王府井%'
也就是先把查询的目标转成utf8,然后再进行查询.
当然了,以上是在迁移后,库中是乱码的情况下,进行操作的,那我们需要把编码转成utf8这样不用去改写代码,免去不必要的麻烦!
处理前的编码如下:
使用如下的操作:
UPDATE cnarea_2020 SET
name=convert(cast(convert(name using latin1) as binary) using utf8),
short_name=convert(cast(convert(short_name using latin1) as binary) using utf8),
merger_name=convert(cast(convert(merger_name using latin1) as binary) using utf8)
WHERE 1=1
处理后的编码如下:
这个时候可以直接查询,不用进行转换了!
现在已经是正常的编码了,迁移就成功了,不用再去改代码来处理了!
标签:编码,convert,code,latin1,UTF8,乱码,using,name 来源: https://blog.csdn.net/lchmyhua88/article/details/120986746
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。