我有一张使用UTF-8- default
整理的表格。
我在此表中有一个名为company
的列,其值为Café Rouge
当我执行以下查询时:
select * from company where name ='Cafe Rouge'
它列出了这家公司,因为它会处理字符é =e
但是当我使用replace命令时,它不会将é
视为e
。
所以,
select replace('Café Rouge','e','z')
给了我'Café Rougz'
,即它不会将é
替换为z
。
任何建议都会很明显
答案 0 :(得分:1)
我认为你可以做的好事之一是保持第二列,使这些字符串保持正常形式;例如,这个专栏将举行“Cafe Rouge”而不是“CaféRouge”。您可以在查询中投影特殊字符,然后使用普通表单列进行查询。
答案 1 :(得分:1)
尝试
SELECT REPLACE(CONVERT(name USING ascii), 'e', 'z')
在执行替换之前将name
列转换为ASCII。
答案 2 :(得分:0)
我认为你不能那样做。更安全的赌注是简单地替换那些特定的角色。
答案 3 :(得分:0)
为什么不在caférouge上执行选择,并在每个返回的结果上替换所需的列?
答案 4 :(得分:0)
您需要在mySQL之外执行此操作。
你可以使用CONVERT()
规范化mySQL中的字符串,如@Christian所示,但这会破坏任何其他非ASCII字符:
Bürgercafé Römer
会结束
Burgercafz Romer
其他字符集(如西里尔字母或中文字符)中的字符将被完全删除。
您最好的方法是专门替换您要替换的所有字符。
replace('Café Rouge','e','z')
replace('Café Rouge','é','z')
replace('Café Rouge','è','z')
要完全 你想要的东西,你必须将每个字符串加载到像PHP这样的编程语言中。
在那里,您可以执行以下操作:
从数据库加载字符串;确保它是UTF-8
将字符串拆分为字符(注意多字节字符 - 使用mb_split()
)
浏览每个角色
使用iconv($character, "UTF-8", "ASCII//TRANSLIT");
如果标准化字符产生e
,您就知道需要在字符串中替换它。
将更改后的字符串写回数据库。