遇见个多国字符问题!

2018-07-12 11:59:05 +08:00
 xuecat
  1. Å, å,这是丹麦的
  2. Ä ä,这是德语的
  3. A a 这是英文得

我现在问题是 mysql(人名表):

用 like 检索 `Å`,`A`, `Ä`中任意一个,会出现包含 1,2,3 的字符串(1,2,3 代表上面的外国语字符)
用 instr,lacate 检索`Å`,`Ä`中任意一个,会出现包含 1,2 的字符串

期望结果检索Ä只匹配出包含它的字符,检索Å只匹配出包含它的字符。 求解!!多谢。。。。

3720 次点击
所在节点    MySQL
13 条回复
zjp
2018-07-12 12:35:46 +08:00
字符集和排序规则是什么,应该用 utb8mb4 和 utf8mb4_unicode_ci
xuecat
2018-07-12 13:03:58 +08:00
@zjp
字符集是 utf8 -- utf-8 unicode
排序规则 utf8_general_ci
thetydead
2018-07-12 13:21:48 +08:00
字符集使用 utb8mb4,这才是真的 utf-8 字符
scnace
2018-07-12 13:35:49 +08:00
楼上正解 mysql 的 utf8 是个坑 utf8mb4 才是 utf8
zjp
2018-07-12 13:41:15 +08:00
@xuecat 测试了下才发现 utf8_unicode_ci 没有作用,一直以为它是基于 Unicode 码点进行比较...应该是 utf8_bin 才对,实测可行。

mb4 和你的问题没有关系,不应该提这个的...
xuecat
2018-07-12 14:43:14 +08:00
@zjp 我这里好像都不行。。。
我试了 mb4,也试了 unicode_ci, _bin。都没有达到我得预期。

SELECT * FROM dbp_log_object as a WHERE locate('Ä',a.objectname)>0
xuecat
2018-07-12 14:56:52 +08:00
难道我要重写插入数据?
xuecat
2018-07-12 15:12:32 +08:00
insert into DBP_LOG_OBJECT values(111,1,0,-1,'TeamÅ','',0,'');
insert into DBP_LOG_OBJECT values(112,1,0,-1,'TeamÄ','',0,'');
SELECT * FROM dbp_log_object as a WHERE locate('Ä',a.objectname)>0

SELECT * FROM dbp_log_object as a WHERE instr(a.objectname,'Ä')

还是不行,我分别用 mb4,再次插入等,查出来都不行。。。。
xuecat
2018-07-12 15:34:16 +08:00
@scnace @thetydead
还有点子吗?
hahastudio
2018-07-12 15:39:40 +08:00
timonwong
2018-07-12 16:00:36 +08:00
试试
SELECT * FROM dbp_log_object as a WHERE locate('Ä' collate utf8_bin, a.objectname)>0
timonwong
2018-07-12 16:01:18 +08:00
简单的说,你要指定 string literal 的 collate
xuecat
2018-07-12 16:04:37 +08:00
@timonwong 老哥多谢,对了。果然要指定字符

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/470171

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX