SST*_*SST 16 mysql search non-ascii-characters
我有一个MySQL表(测试)与utf-8字符集编码.有三个条目,两个条目具有普通字符,另一个名称具有重音字符.
CREATE TABLE test (
id Integer,
name VARCHAR(50),
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO `test` (`id`, `name`) VALUES (1, 'aaaa');
INSERT INTO `test` (`id`, `name`) VALUES (2, 'AAAA');
INSERT INTO `test` (`id`, `name`) VALUES (3, 'áááá');
Run Code Online (Sandbox Code Playgroud)
如果我运行以下select查询,它将返回所有3个条目
实际结果:-
select * from test where name like '%aa%';
id | name
----|----
1 | aaaa
2 | AAAA
3 | áááá
Run Code Online (Sandbox Code Playgroud)
而不是那样,它应该返回id = 3的最后一个条目.
我不想使用'BINARY'或'COLLATE utf8_bin',因为它只返回区分大小写的搜索.
我需要用绳子正常的搜索像查询,例如: -
预期结果:-
select * from test where name like '%aa%';
id | name
---|-----
1 | aaaa
2 | AAAA
Run Code Online (Sandbox Code Playgroud)
utf8_bin排序规则是您处理重音符号所需的
我不想使用'BINARY'或'COLLATE utf8_bin',因为它只返回区分大小写的搜索.
使用utf8_bin解决这个问题要比使用另一个整理解决重音问题更容易(且性能更高)
SELECT * FROM test WHERE LOWER(name) like '%aa%' COLLATE utf8_bin
Run Code Online (Sandbox Code Playgroud)
- >评论后添加
上面的查询假设查询参数是微不足道的,但如果你不能修改params总是小的,那么你也可以使用这个变量
SELECT * FROM test WHERE LOWER(name) like LOWER('%ÚÙ%') COLLATE utf8_bin
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1741 次 |
最近记录: |