问题:
根据某个varchar类型字段查询,输入大小写区分的条件,查询结果一样,非预期;输入带空格结尾的条件,代码去除了空格,查询结果还是包含了带空格的数据。
测试:
CREATE TABLE IF NOT EXISTS `docs` (
`id` int(6) unsigned NOT NULL,
`name` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `docs` (`id`, `name`) VALUES
(1, 'lycXH'),
(2, 'lycxh'),
(3, ' lycxh'),
(4, 'lycxh ');
创建测试表及测试数据,1和2大小写区分,2和3前空格区分,2和4后空格区分
测试场景如下:
场景一根据查询结果可见:
id=2:忽略了大小写
id=4:忽略了大小写及末尾空格
场景二根据查询结果可见:
id=1:忽略了大小写
id=4:忽略了末尾空格
场景三查询条件带末尾空格和场景二不带空格结果一样,同场景一忽略大小写的结果也一样
场景四查询条件带前空格是完全匹配带前空格的值
对于前后空格的最好是在存值的时候就过滤掉,而不区分大小写的问题可以sql加上BINARY如下:
场景五加上BINARY严格区分大小写