我相信所有256个latin1编码在utf8中都有一个映射。(但肯定不是另一个方向。)因此,如果您拥有合适的代码,您将不会丢失数据。我建议您先进行转换测试,然后再冒险进行转换。
但是首先,我们需要确保您进行了正确的转换。您有一个latin1列,其中包含latin1中的一个字节的重音字母吗?查找带有重音符号的单元格,SELECT LENGTH(col), CHAR_LENGTH(col) ...
如果长度相同,则为一字节编码,例如latin1。
SELECT HEX(col) ...
-e-acute(é)在latin1中为E9或在utf8中为C3A9。这很重要-如果您有E9,则需要将所有文本从latin1转换为utf8,并更改列的声明。如果您已经有C3A9,那么您已经有utf8伪装为latin1;否则,您将伪装为latin1。您需要在不修改字节的情况下更改声明。
第一种情况:ALTER TABLE tbl CONVERT TO CHARACTER SET utf8;
-这会主动更改列中的必要字节。
第二种情况: alter table t modify c varbinary(...); alter table t modify c varchar(...) charset utf8;
有关该情况和其他情况的更多讨论:mysql.rjweb.org/doc.php/charcoll
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句