如何将带有序列化值的latin1表转换为utf8?
问题描述:
我必须将一些巨大的表格(> 60 GB)从latin1转换为utf8,我正在寻找最佳实践。一个问题是一些表包含序列化的php对象。如何将带有序列化值的latin1表转换为utf8?
我的第一种方法是将TEXT列设置为BLOB,将字符集转换为utf8并将列转换回TEXT,但是我在最后一步遇到了一些问题(不正确的字符串值:'\ xE4 \ xF6 \ XFC \ XDF“;?...')
什么是对值正确转换为UTF-8,最好的策略
答
鉴于数据是在latin1编码,如在äöüß
你例如,和即列为CHARACTER SET latin1
,请参阅http://mysql.rjweb.org/doc.php/charcoll#fixes_for_various_cases,其中说
ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4;
(或UTF8)
注:这将改变在一个表中的所有文本列的字符集;只有一张桌子。
请注意,[serialize()](http://php.net/serialize)输出不应该是纯文本:*请注意,这是一个二进制字符串,可能包含空字节,需要存储并如此处理。例如,serialize()输出通常应存储在数据库的BLOB字段中,而不是CHAR或TEXT字段* –