【问题标题】:Remove accents on a string field in mysql query删除 mysql 查询中字符串字段的重音符号
【发布时间】:2019-02-23 01:24:13
【问题描述】:

我有以下疑问:

SELECT * FROM main_creditperson WHERE name="Irene Olga López"

这将返回:

id         name
366354     Irene Olga López

有没有一种简单的方法可以在查询中执行此操作,以便删除所有重音的结果?

id         name
366354     Irene Olga Lopez

【问题讨论】:

    标签: mysql sql utf-8 accent-sensitive


    【解决方案1】:

    您可以尝试创建一个函数来将重音替换为普通单词。

    架构 (MySQL v5.6)

    CREATE TABLE main_creditperson(id int,name Nvarchar(50));
    
    INSERT INTO main_creditperson VALUES (366354,N'Irene Olga López');
    
    
    ALTER TABLE main_creditperson 
    MODIFY name VARCHAR(50) CHARACTER SET utf8mb4      
          COLLATE utf8mb4_bin; 
    
    DROP FUNCTION IF EXISTS fn_remove_accents;
    DELIMITER |
    CREATE FUNCTION fn_remove_accents( textvalue VARCHAR(10000) ) RETURNS VARCHAR(10000)
    
    BEGIN
    
        SET @textvalue = textvalue;
    
        -- ACCENTS
        SET @withaccents = 'ŠšŽžÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝŸÞàáâãäåæçèéêëìíîïñòóôõöøùúûüýÿþƒ';
        SET @withoutaccents = 'SsZzAAAAAAACEEEEIIIINOOOOOOUUUUYYBaaaaaaaceeeeiiiinoooooouuuuyybf';
        SET @count = LENGTH(@withaccents);
    
        WHILE @count > 0 DO
            SET @textvalue = REPLACE(@textvalue, SUBSTRING(@withaccents, @count, 1), SUBSTRING(@withoutaccents, @count, 1));
            SET @count = @count - 1;
        END WHILE;
    
        SET @special = '!@#$%¨&*()_+=§¹²³£¢¬"`´{[^~}]<,>.:;?/°ºª+*|\\''';
        SET @count = LENGTH(@special);
    
        WHILE @count > 0 do
            SET @textvalue = REPLACE(@textvalue, SUBSTRING(@special, @count, 1), '');
            SET @count = @count - 1;
        END WHILE;
    
        RETURN @textvalue;
    
    END
    |
    DELIMITER ;
    

    查询 #1

    SELECT id,fn_remove_accents(name)  name
    FROM main_creditperson 
    WHERE name="Irene Olga López";
    
    | id     | name             |
    | ------ | ---------------- |
    | 366354 | Irene Olga Lopez |
    

    View on DB Fiddle


    function Reference

    【讨论】:

      【解决方案2】:

      如果COLLATION 是任何..._ci 变体,则在比较时会忽略重音符号。也就是说,不需要去除重音的代码。

      【讨论】:

        猜你喜欢
        • 2012-01-21
        • 2014-12-11
        • 1970-01-01
        • 1970-01-01
        • 2022-01-03
        • 2014-06-01
        • 2019-03-31
        相关资源
        最近更新 更多