Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql将所有特殊的unicode字符替换为ascii对应字符_Mysql_Utf 8_Replace_Non Ascii Characters - Fatal编程技术网

Mysql将所有特殊的unicode字符替换为ascii对应字符

Mysql将所有特殊的unicode字符替换为ascii对应字符,mysql,utf-8,replace,non-ascii-characters,Mysql,Utf 8,Replace,Non Ascii Characters,我有一个编码为utf8 general ci的字段,其中许多值包含非ascii字符。我想 搜索包含任何非ascii字符的所有字段 用相应的ascii版本替换所有非ascii字符 例如:科特迪瓦应该被科特迪瓦取代,圣多美应该被圣多美取代 我如何做到这一点?如果我只是将字段类型更改为ascii,非ascii字符将替换为“?”。我甚至无法使用 RLIKE '%[^a-z]%' 比如说 SELECT columname FROM tablename WHERE NOT columname REGE

我有一个编码为
utf8 general ci
的字段,其中许多值包含非ascii字符。我想

  • 搜索包含任何非ascii字符的所有字段

  • 用相应的ascii版本替换所有非ascii字符

  • 例如:科特迪瓦应该被科特迪瓦取代,圣多美应该被圣多美取代

    我如何做到这一点?如果我只是将字段类型更改为ascii,非ascii字符将替换为“?”。我甚至无法使用

    RLIKE '%[^a-z]%'
    
    比如说

    SELECT columname 
    FROM tablename 
    WHERE NOT columname REGEXP '[a-z]';
    
    返回一个空集


    谢谢

    要选择的查询是

    select * from test where maintext rlike  '[^\x00-\x7F]'
    

    希望这有帮助

    我从您之前的问题中推测您正在使用PHP

    然后,您可以使用的应答返回您希望使用的对象,然后使用unidecode尝试将对象转换为ascii等价物。

    在Perl中,您可以使用

    在MySQL中,要将utf8(或utf8mb4)转换为ascii,必须使用一些难看的“?”字符作为替换,这不是一个简单的函数。最好在将它们插入数据库之前替换它们,或者在Perl(或其他)中运行一些东西来提取数据并一次更新一行


    文本::Unidecode有许多不同的端口,使用不同的语言:,,,。

    您所说的“非ascii字符”是什么意思?值是否在utf8中正确编码,或者您是否遇到编码问题?请记住,“ô”不是“ASCII”。US-ASCII是仅包含英文字母的7位范围。您的“科特迪瓦”示例=>“科特迪瓦”,因为1。“ô”不是ASCII,2。单引号字符没有问题。谢谢,这很有帮助,虽然自动转换有点复杂,我想(自定义功能?),这将帮助我暂时。可能有助于实际删除我不认为OP希望删除实际的非ascii字符,而是将其替换为ascii等效字符。因此可能更具相对性。也就是说,我们不能假定OP使用的是python或django。如果他们使用的是python,那么就可以完美地工作。鉴于他们的大多数问题都是基于PHP的,我怀疑他们是否会使用python。