MySQL替换ASCII字符

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

我对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\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将其截断。不幸的是,没有任何变化。不,不要使用该选项。