如何在MySQL中删除越南语字符

时间:2018-12-18 11:00:31

标签: mysql

我的代码MYSQL

DELIMITER //

CREATE FUNCTION fNonUnicode(p_inputVar LONGTEXT )
RETURNS LONGTEXT
BEGIN    
IF (p_inputVar IS NULL OR p_inputVar = '') THEN  RETURN '';
END IF;

DECLARE v_RT LONGTEXT;
DECLARE v_SIGN_CHARS NVARCHAR(256);
DECLARE v_UNSIGN_CHARS NVARCHAR (256);

SET v_SIGN_CHARS = Concat(N'ăâđêôơưàảãạáằẳẵặắầẩẫậấèẻẽẹéềểễệếìỉĩịíòỏõọóồổỗộốờởỡợớùủũụúừửữựứỳỷỹỵýĂÂĐÊÔƠƯÀẢÃẠÁẰẲẴẶẮẦẨẪẬẤÈẺẼẸÉỀỂỄỆẾÌỈĨỊÍÒỎÕỌÓỒỔỖỘỐỜỞỠỢỚÙỦŨỤÚỪỬỮỰỨỲỶỸỴÝ' , NCHAR(272) + NCHAR(208));
SET v_UNSIGN_CHARS = N'aadeoouaaaaaaaaaaaaaaaeeeeeeeeeeiiiiiooooooooooooooouuuuuuuuuuyyyyyAADEOOUAAAAAAAAAAAAAAAEEEEEEEEEEIIIIIOOOOOOOOOOOOOOOUUUUUUUUUUYYYYYDD';

DECLARE v_COUNTER int;
DECLARE v_COUNTER1 int;

SET v_COUNTER = 1;
WHILE (v_COUNTER <= CHAR_LENGTH(RTRIM(p_inputVar)))
DO  
    SET v_COUNTER1 = 1;
    WHILE (v_COUNTER1 <= CHAR_LENGTH(RTRIM(v_SIGN_CHARS)) + 1)
    DO
        IF UNICODE(SUBSTRING(v_SIGN_CHARS, v_COUNTER1,1)) = UNICODE(SUBSTRING(p_inputVar,v_COUNTER ,1))
        THEN          
            IF v_COUNTER = 1 THEN
                SET p_inputVar = CONCAT(SUBSTRING(v_UNSIGN_CHARS, v_COUNTER1,1) , SUBSTRING(p_inputVar, v_COUNTER+1,CHAR_LENGTH(RTRIM(p_inputVar))-1));      
            ELSE
                SET p_inputVar = CONCAT(SUBSTRING(p_inputVar, 1, v_COUNTER-1) ,SUBSTRING(v_UNSIGN_CHARS, v_COUNTER1,1) , SUBSTRING(p_inputVar, v_COUNTER+1,CHAR_LENGTH(RTRIM(p_inputVar))- v_COUNTER));
            END IF;
            BREAK
        END IF;
        SET v_COUNTER1 = v_COUNTER1 +1;
    END WHILE;
    SET v_COUNTER = v_COUNTER +1;
END WHILE;
-- SET @inputVar = replace(@inputVar,' ','-')
RETURN p_inputVar;
END;
//

DELIMITER ;
  

但是错误:您的SQL语法有错误;查看与您的MariaDB服务器版本相对应的手册,以在'DECLARE v_RT LONGTEXT附近使用正确的语法;

     

最后一次:我要使用: fNonUnicode(“ Xinchàocácbạn”) return Xin chao cac ban

2 个答案:

答案 0 :(得分:0)

MySQL删除重音符号和特殊字符的功能

 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;

        -- SPECIAL CHARS
        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 :(得分:0)

请尝试以下代码

DROP FUNCTION IF EXISTS fn_remove_accents;
DELIMITER //
CREATE FUNCTION fn_remove_accents(textvalue TEXT)
    RETURNS TEXT

BEGIN
    SET @textvalue = textvalue;

    -- ACCENTS
    SET @withaccents = 'ăâđêôơưàảãạáằẳẵặắầẩẫậấèẻẽẹéềểễệếìỉĩịíòỏõọóồổỗộốờởỡợớùủũụúừửữựứỳỷỹỵýĂÂĐÊÔƠƯÀẢÃẠÁẰẲẴẶẮẦẨẪẬẤÈẺẼẸÉỀỂỄỆẾÌỈĨỊÍÒỎÕỌÓỒỔỖỘỐỜỞỠỢỚÙỦŨỤÚỪỬỮỰỨỲỶỸỴÝ';
    SET @withoutaccents = 'aadeoouaaaaaaaaaaaaaaaeeeeeeeeeeiiiiiooooooooooooooouuuuuuuuuuyyyyyAADEOOUAAAAAAAAAAAAAAAEEEEEEEEEEIIIIIOOOOOOOOOOOOOOOUUUUUUUUUUYYYYY';
    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;

    RETURN @textvalue;
END
//
DELIMITER ;