我正在尝试选择在我们的数据库中已经被破坏并包含非UTF8字符的所有行...这是正则表达式的最佳吗?
目前,我尝试过“喜欢'%Ã%'”,这种效果相当不错,但不是100%。这个正则表达式并不好,因为它将我们所有成功的'翻译回utf8'字符以及空格等(REGEXP'(\ S + [^ A-Za-z0-9] +)'“)拉回来。虽然后者很容易脱身,我不确定正则表达式是最好的路线。
未选择的示例行包括“diÔ,“yücel”和“GrÃ¥berg”等字符。
由于
答案 0 :(得分:0)
我不确定这可以(或者应该)在SQL查询中表达。您只能遍历整个数据库,并查看每行是否是有效的UTF-8数据,将键输出到不是的行。我不确定PHP是否有现成的函数来查看“这些字节是否有效UTF-8”,但Python确实如此 - 如果您知道,您可能会考虑它。我曾经写过一个程序来做这件事,因为我遇到了类似的问题。 (我没有源代码,抱歉。)
有一点需要注意:有可能,但不太可能,意外存储和编码为ISO-8859-1的字符串也是有效的UTF-8字符串。
我不知道MySQL如何处理字符串,但MySQL是否允许您将非UTF-8字符串插入UTF-8数据库? (例如,PostgreSQL不允许您在UTF-8数据库上执行此操作。)