MySQL替换ASCII字符
我对MySQL有一些奇怪的问题。我试图匹配两个字符串,但在一个字符串中有额外的字符 初始字符串看起来像“Ascot” 当我选择:MySQL替换ASCII字符,mysql,Mysql,我对MySQL有一些奇怪的问题。我试图匹配两个字符串,但在一个字符串中有额外的字符 初始字符串看起来像“Ascot” 当我选择: select ascii(substring(name, 1, 1)), ascii(substring(name, 7, 1)) 我得到194,194。但当我替换时: select replace(name, char(194), '' ) 它在phpMyAdmin中显示为“?Ascot”,未进行匹配。有人能帮我吗 问题列定义为utf8mb4\u unicode
select ascii(substring(name, 1, 1)), ascii(substring(name, 7, 1))
我得到194,194。但当我替换时:
select replace(name, char(194), '' )
它在phpMyAdmin中显示为“?Ascot”,未进行匹配。有人能帮我吗
问题列定义为utf8mb4\u unicode\u ci。我试图将此列与另一个定义为utf8\u general\u ci的表中的列相匹配。
尝试将utf8_general_ci更改为utf8mb4_unicode_ci,但没有结果
当我使用substringname,2,5时,它匹配。因此,解决方案应该是替换这些字符
编辑:
我尝试了以下功能来删除非字母数字字符,现在它似乎可以工作了:
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE v_char VARCHAR(1);
DECLARE v_parseStr VARCHAR(255) DEFAULT ' ';
WHILE (i <= LENGTH(prm_strInput) ) DO
SET v_char = SUBSTR(prm_strInput,i,1);
IF v_char REGEXP '^[A-Za-z0-9 ]+$' THEN #alphanumeric
SET v_parseStr = CONCAT(v_parseStr,v_char);
END IF;
SET i = i + 1;
END WHILE;
RETURN trim(v_parseStr);
END
但这是非常低效的…在您的mysql查询之前使用此选项:
mysql_query("SET NAMES 'utf8'");
看看这个。这可能会有所帮助。您使用单字节字符集还是多字节字符集,例如utf8?@Shadow,我怎么能看到?我用一些排序规则更新了我的问题,如果你没有看到的话。utf8和utf8mb4都是多字节字符集。ascii函数基本上告诉您组成文本的字节字符串中最左边字节的值。多字节编码中最左边的字节不一定等于最左边的字符。您应该确定字符串两侧的字符,并可以使用trim将其截断。不幸的是,没有任何变化。不,不要使用该选项。