Mysql用它们的ascii对应替换所有特殊的unicode字符

时间:2013-08-22 04:11:01

标签: mysql utf-8 replace non-ascii-characters

我有一个编码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]'; 返回一个空集。

由于

3 个答案:

答案 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有许多不同语言的端口:PythonPHPJavaRubyJavaScript,{{3 }},HaskellC#Clojure

相关问题