【NO324 - 241217】
今天是专业豆知识。也是我今天实际修复的一个问题。
众所周知,MySQL的编码可能会成为一个问题。
在低版本中,哪怕MySQL内的编码是latin1,只需要MySQL服务器的系统编码和MySQL内的编码相同,那么输入的UTF8格式文本会只在数据库内变成乱码,但可以在前端正常显示。
但在高版本中,严格的判定让其在前端也显示为乱码,这时候就需要手动转换一下数据库内容的编码了,光跑ALTER TABLE修改COLLATE是没用的。
在网上搜一下,能搜到很多方法让你先将要转码的内容转为BINARY或者BLOB,然后重新导入一遍,但有时候这是不管用的,因为数据库的编码有可能反而和你导出导入的编码吻合,只是这些数据仍然是latin1编码而已,所以出来的是什么,进去的还是什么。
那怎么办呢,其实绕一个圈子就行,我转BINARY之前先给它转成latin1就是:
convert(cast(convert(`Field` using latin1) as binary) using utf8mb4) FROM Table;
当然,这只能用在从头到尾都因为低版本的问题导致UTF8内容全部作为latin1进行存储才管用,这条语句会毁掉全部已经是正常的UTF8编码存储的数据。
那么说个事情,我今天手上拿了一直延续到12月29日,每天一due,总计70700字的翻译项目。因此豆知识直到30日之前全部暂停。