我有一个编码utf8-general-ci
的字段,其中许多值包含非ascii字符。我想
1)搜索包含任何非ascii字符的所有字段
2)将所有非ascii字符替换为对应的 ascii版本。
例如:côte-d'ivoire应该替换为côte-d-ivoire,são-tomé应该替换为sao-tome
我如何实现这一目标?如果我只是将字段类型更改为ascii,则非ascii字符将替换为“?”。我甚至无法使用RLIKE '%[^a-z]%'
;
例如,SELECT coulumname FROM tablename WHERE NOT columname REGEXP '[a-z]';
返回一个空集。
由于
答案 0 :(得分:3)
一个sql小提琴示例位于
http://www.sqlfiddle.com/#!2/c1d90/1/0
要选择的查询是
select * from test where maintext rlike '[^\x00-\x7F]'
希望这有帮助
答案 1 :(得分:0)
我从你之前的问题中假设你正在使用PHP。
https://github.com/silverstripe-labs/silverstripe-unidecode
然后你可以使用skv的答案来返回你想要使用的对象,然后使用unidecode尝试将对象转换为它的ascii等价物。
答案 2 :(得分:0)
在Perl中,您可以使用Text::Unidecode。
在MySQL中,没有一个简单的功能可以将utf8(或utf8mb4)转换为ascii而不会吐出一些丑陋的'?'字符作为替代品。最好在将它们插入数据库之前替换它们,或者在Perl(或其他)中运行一些东西来提取数据并一次重新更新一行。
Text :: Unidecode有许多不同语言的端口:Python,PHP,Java,Ruby,JavaScript,{{3 }},Haskell,C#,Clojure。