您的位置:首页 > 数据库 > MySQL

MySQL查询时的字符串空格问题

2017-10-23 15:30 281 查看
因为官方文档上说是MySQL校对规则属于PADSPACE,对CHAR和VARCHAR值进行比较都忽略尾部空格,和服务器配置以及MySQL版本都没关系。也因此,如果遇到某些特殊的情况时,这是一个不容易的发现坑。会出现传入的查询值为“10     ”时,sql会将实际值为“10”的也查询出来。

假设有下面这么一张表:

CREATE TABLE `test` (
`name1` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`name2` char(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

我们插入一行数据:
INSERT into test(name1,name2) values("10","10");

当我们运用下面的查询语句进行查询时,你会发现,记录居然都是可以查询得出来的。(明明我们插入的数据是只有10,但是我们查询时where的值是10加上N个空格)
SELECT
*
FROM
test
WHERE
name2 = "10 ";

SELECT
*
FROM
test
WHERE
name1 = "10 ";

而且,不管是varchar还是char类型,都是可以将结果查出来的。不过,需要特别注意的是,仅仅只有当空格出现在末尾的时候,才会发生这样的事情。也就是说,如果我们匹配的值是“    10”,或者“1   0”这样的话,都是肯定查不出来的。
但是,这样还是不够啊,如果想做精细匹配怎么办呢?就是哪怕末尾多个空格都算它不正确,那要怎么弄呢?只需要改成下面的语句即可:

SELECT
*
FROM
test
WHERE
name1 = BINARY "10 ";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql sql