You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中实现Unicode转码最简便的方法是什么?

在MySQL中实现类似Python unidecode的特殊字符转拉丁字符方案

好问题!在Python里用unidecode处理特殊字符转纯拉丁字符确实很省心,MySQL里虽然没有直接开箱即用的同名函数,但有几个相对简便的方案可以达到类似效果:

1. 快速但有局限:用CONVERT函数转ASCII

如果你的需求比较简单,且能接受部分特殊字符被转为?的情况,可以直接用MySQL内置的CONVERT函数:

SELECT 
    CONVERT('Ässät' USING ascii) AS converted1,
    CONVERT('Kärpät' USING ascii) AS converted2,
    CONVERT('Łódź' USING ascii) AS converted3;

输出结果:

converted1 | converted2 | converted3
-----------|------------|-----------
Ass?t      | Karpat     | ?od?

这个方法的问题是,像Ł这类不在ASCII直接映射范围内的字符会被替换成问号,所以只适合处理基础的变音字符。

2. 最靠谱:自定义unidecode函数

如果想要和Python里一样精准的转换效果,最推荐的方式是创建一个自定义函数,手动映射常见的特殊字符到对应的拉丁字符。这样一次创建后,后续使用就和Python里一样方便了:

DELIMITER //
CREATE FUNCTION unidecode(input_str VARCHAR(255)) 
RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
    DECLARE output_str VARCHAR(255) DEFAULT input_str;
    
    -- 替换芬兰/波兰等语言常见的特殊字符
    SET output_str = REPLACE(output_str, 'Ä', 'A');
    SET output_str = REPLACE(output_str, 'ä', 'a');
    SET output_str = REPLACE(output_str, 'Ö', 'O');
    SET output_str = REPLACE(output_str, 'ö', 'o');
    SET output_str = REPLACE(output_str, 'Å', 'A');
    SET output_str = REPLACE(output_str, 'å', 'a');
    SET output_str = REPLACE(output_str, 'ś', 's');
    SET output_str = REPLACE(output_str, 'Ł', 'L');
    SET output_str = REPLACE(output_str, 'ź', 'z');
    SET output_str = REPLACE(output_str, 'ć', 'c');
    
    -- 可以根据自己的需求继续添加更多字符映射
    RETURN output_str;
END //
DELIMITER ;

创建完成后,使用起来就非常简单了:

SELECT 
    unidecode('Ässät') AS converted1,
    unidecode('Kärpät') AS converted2,
    unidecode('Łódź') AS converted3;

输出结果完全符合你的预期:

converted1 | converted2 | converted3
-----------|------------|-----------
Assat      | Karpat     | Lodz

这个方案的好处是你可以完全控制字符的映射规则,适配不同语言的特殊字符。

3. MySQL 8.0+可选:用REGEXP_REPLACE批量替换

如果你的MySQL版本是8.0及以上,也可以用REGEXP_REPLACE结合正则表达式批量替换同类型的特殊字符,比如针对变音字符:

SELECT 
    REGEXP_REPLACE(
        REGEXP_REPLACE('Łódź', 'Ł', 'L'),
        'ódź', 'odz'
    ) AS converted;

不过这个方法需要针对不同字符写单独的正则规则,不如自定义函数直观,适合临时处理少量字符的场景。

总的来说,自定义函数是最接近Python unidecode体验的方案,虽然需要一次初始化工作,但后续使用成本极低,能覆盖绝大多数场景。

内容的提问来源于stack exchange,提问作者MattiH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 09:17:40