我在“utf8 - UTF-8 Unicode”中有一个模式作为字符集和“utf8_spanish_ci”的排序规则。
所有内部表都是 InnoDB,具有与提到的相同的字符集和排序规则。
问题来了:
像这样的查询
SELECT *
FROM people p
WHERE p.NAME LIKE '%jose%';
我得到 83 个结果行。我应该有 84 个结果,因为我知道。
更改位置:
WHERE p.NAME LIKE '%JOSE%';
我得到完全相同的 83 行。使用 JoSe、Jose、JOSe 等组合。报告所有相同的 83 行。
当重音在游戏中播放时,问题就来了。如果这样做:
WHERE p.NAME LIKE '%josé%';
我没有得到任何结果。0 行。
但如果我这样做:
WHERE p.NAME LIKE '%JOSÉ%';
我只得到一个结果行,所以 1 行。这是唯一带有重音“jose”并大写的行。
我已经尝试过使用 josÉ 或 JoSÉ 或我所做的任何组合,只要重音字母保持大写或不保持大写,因为它确实存储在数据库中并且它仍然返回唯一的行。如果我突然用 JOSE 中的大写字母组合将“É”更改为“é”,它不会返回任何行。
所以结论:
- 如果游戏中没有拉丁字符,则不区分大小写。
- 如果出现拉丁字符,则区分大小写。
- 口音敏感,好像我搜索 JOSE 或 jose,我只得到 83 行,而不是我需要的 84 行。
我想要的是?
- 要搜索“jose”、“JOSE”、“José”、“JOSÉ”、“JÒSE”、“jöse”、“JoSÈ”……必须返回我知道存在的 84 行。我如何将我的搜索变成不区分大小写和不区分“拉丁”的。
像COLLATION
on这样的解决方案LIKE
对我不起作用,不知道为什么......
我能做些什么?
编辑:
如果我这样做:
WHERE p.NAME LIKE '%jose%' COLLATE utf8_general_ci;
我得到错误:
COLLATION 'utf8_general_ci' 对 CHARACTER SET 'latin1' 无效
而且我也更改了列上所有可能的排序规则!
如果我做类似的事情:
WHERE p.NAME LIKE _utf8 '%jose%' COLLATE utf8_general_ci;
报告了相同的 83 行,就好像我什么都没做一样……