【发布时间】:2023-03-28 10:58:01
【问题描述】:
我有一个使用 UTF-8- default 排序规则的表。
我在此表中有一个名为 company 的列,其值为 Café Rouge
当我这样查询时:
select * from company where name ='Cafe Rouge'
它列出这家公司是因为它处理字符é =e,但是当我使用替换命令时,它不会将é 视为e。
所以,
select replace('Café Rouge','e','z')
给我'Café Rougz',即它不会用z 替换é。
任何建议都会受到重视
【问题讨论】:
-
我不确定这种行为是否可以改变 -
REPLACE()可能正在进行二进制比较。简单地替换é不是一种选择吗? -
为什么需要替换'é'?您可能应该创建新列
company_normalized,在其中放置不带重音、修剪、标准化空格等的值,然后在有用的地方简单地使用标准化变体,否则使用真实的公司名称...... -
No :( 这不是一个选项,因为可能有更多这样的字符会导致问题。此外,我无法将表更改为二进制排序规则,因为我们目前在任何地方都使用不区分大小写并将其更改为二进制将意味着不同地方的变化。
-
This page 说
REPLACE()应该以这种方式工作,因此您必须推出自己的功能。Note: The REPLACE() function, unlike all other functions, always ignores the collation of the string input and performs a case-sensitive comparison. -
@DrH 如果有的话,那就是
select replace(replace(name, 'è', 'e'), 'à', 'a') from company;
标签: mysql utf-8 character-encoding collation