我继承了一个需要进一步开发的网络系统。 这个系统似乎是由一个只看了两章PHP教程就认为自己能编码的人创建的...
所以...网页本身采用UTF8编码,所有内容的展示和输入都是在其中。数据库表已经使用UTF8字符集创建。但是,在配置中却有"SET NAMES LATIN1"。换句话说,UTF8编码的字符串被强制转换为Latin1编码并填充到数据库中。
有没有办法将这个混乱转换成真正存储为utf8并消除latin1?
我尝试过这个,但由于数据库表设置为utf8,所以无法工作。也尝试过这个,但不成功。
如果可能的话,我也许可以通过在PHP中使用latin1编码读取所有表,然后将它们写回一个新的utf8数据库来完成此操作,但我想避免这样做。
IGNORE
子句。但这会导致文本被截断,例如¡Felicidades
将变成Felicidades
。基本上,这个字符串已经是UTF8格式的,转换为Latin1再转回UTF8会导致数据丢失。如果原始字节发生改变,您可以添加以下条件来跳过这些行:HEX(CONVERT(title USING latin1)) = HEX(CONVERT(CONVERT(CONVERT(title USING latin1) USING BINARY) USING utf8))
。 - Dean Or