这看起来不是字符集,但整理有关。排序规则定义了MySQL在分类或比较时如何将字符视为“几乎相等”。
例如,ISO-8859-15默认排序规则将治疗ü = u
你可以做的是把你的领域就像一个箱子整理。 二进制排序规则不会将相似字符视为相等。
选择正确的二进制排序
SELECT CHARACTER_SET_NAME, COLLATION_NAME FROM information_schema.COLLATIONS WHERE COLLATION_NAME LIKE '%bin%';
然后执行你这样的更新:
UPDATE TABLE SET columnx = REPLACE(columnx COLLATE latin1_bin, '–', '-');
更正: 更换比较使用二进制排序
编辑总是做:
如果仍然有0行更新,您可能不会替换正确的字符。 转换包含字符为十六进制,并张贴十六进制值,所以我们可以找出哪些烧焦我们正在谈论
例如串
SELECT HEX(columnx) LIMIT 1;
EDIT2:
刚刚看到,你居然说你\u0096
这是一个控制字符称为START OF GUARDED AREA ..什么都设定此角色创造了..在六角这是0xC2 0x96
。 在您的示例查询中,您将替换名为EN DASH的字符集
只需粘贴它即可替换控制字符,转换可能会将其分解。相反,你可以使用UNHEX(hexval)来告诉MySQL的字符你的意思是
UPDATE TABLE SET columnx = REPLACE(columnx UNHEX('C296'), '-');
,或者使这更清楚(或更加混乱:)),这可以通过“正常”的连字符的十六进制值以及
UPDATE TABLE SET columnx = REPLACE(columnx UNHEX('C296'), UNHEX('2D'));
...或者你可以解决根本问题,并让你的字符显示“正常”。 –
有一种机制可以接受这些文本(全部在ISO-8859-1中),使用UTF-8对它们进行编码,从它们生成JSON并将它们显示在JSON的另一侧,它们显示为正方形。我无法控制这一点,并被要求更正数据库。我已经在其他字符上取代了,例如''''替换为'''但是没有这个特定的运气。 – RedDragon
祝你好运。你基本上被卡住了7位ASCII码。 –