我需要重新设计一个类,其中(除其他事项外)UTF-8字符串被错误双重编码:
$string = iconv('ISO-8859-1', 'UTF-8', $string);
:
$string = utf8_encode($string);
这些有问题的字符串已经保存在MySQL数据库中多个表字段中。所有受影响的字段使用排序规则utf8_general_ci
。
通常我会设置一个小的PHP修补脚本,循环遍历受影响的表格,选择记录,通过在双编码字段上使用utf8_decode()
来纠正有问题的记录并更新它们。
由于这次有许多和巨大的表格,并且错误仅影响德语umlauts(äöüßÄÖÜ), 我想知道是否有比那更聪明/更快的解决方法。
像以下的纯MySQL解决方案是否安全和可靠?
UPDATE `table` SET `col` = REPLACE(`col`, 'ä', 'ä');
还有其他解决方案/最佳实践吗?
CHANGE
而不是MODIFY
。顺便说一下,我注意到切换到字符集latin1
会隐式地将排序规则切换为latin1_swedish_ci
。是否更安全地附加COLLATE latin1_swedish_ci
来强制执行此操作?对于binary
(切换到none
排序规则)和utf8
(切换回utf8_general_ci
排序规则),情况也是如此。再次感谢您,您救了我的夜晚^^。 - Jürgen ThelenALTER
-- 它是不必要的,可能会损坏数据。 - Rick James