我现在问题是 mysql(人名表):
用 like 检索 `Å`,`A`, `Ä`中任意一个,会出现包含 1,2,3 的字符串(1,2,3 代表上面的外国语字符)
用 instr,lacate 检索`Å`,`Ä`中任意一个,会出现包含 1,2 的字符串
期望结果检索Ä
只匹配出包含它的字符,检索Å
只匹配出包含它的字符。
求解!!多谢。。。。
1
zjp 2018-07-12 12:35:46 +08:00 via Android
字符集和排序规则是什么,应该用 utb8mb4 和 utf8mb4_unicode_ci
|
3
thetydead 2018-07-12 13:21:48 +08:00
字符集使用 utb8mb4,这才是真的 utf-8 字符
|
4
scnace 2018-07-12 13:35:49 +08:00 via Android
楼上正解 mysql 的 utf8 是个坑 utf8mb4 才是 utf8
|
5
zjp 2018-07-12 13:41:15 +08:00
@xuecat 测试了下才发现 utf8_unicode_ci 没有作用,一直以为它是基于 Unicode 码点进行比较...应该是 utf8_bin 才对,实测可行。
mb4 和你的问题没有关系,不应该提这个的... |
6
xuecat OP @zjp 我这里好像都不行。。。
我试了 mb4,也试了 unicode_ci, _bin。都没有达到我得预期。 SELECT * FROM dbp_log_object as a WHERE locate('Ä',a.objectname)>0 |
7
xuecat OP 难道我要重写插入数据?
|
8
xuecat OP 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,再次插入等,查出来都不行。。。。 |
10
hahastudio 2018-07-12 15:39:40 +08:00
|
11
timonwong 2018-07-12 16:00:36 +08:00
试试
SELECT * FROM dbp_log_object as a WHERE locate('Ä' collate utf8_bin, a.objectname)>0 |
12
timonwong 2018-07-12 16:01:18 +08:00 2
简单的说,你要指定 string literal 的 collate
|