我现在问题是 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 ![]() 简单的说,你要指定 string literal 的 collate |