【发布时间】:2011-01-13 01:51:55
【问题描述】:
我找到了一个 Perl 正则表达式,它可以检查字符串是否为 UTF-8(正则表达式来自 w3c site)。
$field =~
m/\A(
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*\z/x;
但我不确定如何将其移植到 MySQL,因为 MySQL 似乎不支持字符的十六进制表示,请参阅this question。
任何想法如何将正则表达式移植到 MySQL? 或者,也许您知道任何其他方法来检查字符串是否为有效的 UTF-8?
更新: 我需要在 MySQL 上运行此检查,因为我需要在服务器上运行它以更正损坏的表。我无法通过脚本传递数据,因为数据库大约 1TB。
【问题讨论】: