2011-02-08 56 views
2

我想选择在我们的数据库中已经被损坏并包含非UTF8字符的所有行...这是否最好由正则表达式?选择所有具有非UTF8字符的行

目前,我尝试过“like'%Ã'''”,这很好用,但不是很长的100%。这个正则表达式并不是很好,因为它将所有成功的'翻译回utf8'字符以及空格等等(REGEXP'(\ S + [^ A-Za-z0-9] +)'))都拉回来。后者是很容易脱身,我不知道,如果正则表达式的最佳路线。非选择

实例行包含的字符,如“DIA©”,“yücel”和“GRA¥冰山”。

谢谢

回答

0

我不确定这可以(或者可能应该)在SQL查询中表达出来,你只需遍历整个数据库,看看每行是否有效的UTF-8数据,输出到行的键我不确定PHP是否有现成的函数来查看“这些字节是否为va盖UTF-8“,但Python确实如此 - 如果你知道的话,你可能会考虑它。我曾经写过一个程序来做这件事,因为我有类似的问题。 (我没有源代码,对不起)。

有一点需要注意:有可能,但不太可能,意外存储和编码为ISO-8859-1的字符串也是有效的UTF -8字符串。

我不知道MySQL如何处理字符串,但MySQL是否允许您将非UTF-8字符串插入到UTF-8数据库中? (例如,PostgreSQL将不允许你在UTF-8数据库上执行此操作。)

+0

谢谢,是的。我现在只是选择整个数据库并使用PHP来显示所有UTF8行。这确实意味着比我想要的更多的数据,但是确保我看到每一行都可能出错。这是我从这里使用的FixUTF8脚本.. http://stackoverflow.com/questions/1401317/remove-non-utf8-characters-from-string – elyob 2011-02-09 10:41:27