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 ";
假设有下面这么一张表:
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查询条件中字符串包含空格的问题
- MySQL中关于查询条件中的字符串空格问题
- MySQL中关于查询条件中的字符串空格问题
- MySQL中关于查询条件中的字符串空格问题
- 关于Mysql查询带单引号及插入带单引号字符串问题
- mysql字符串查询大小写问题
- mysql select *... where id in (select 字符串 from ... )查询结果问题?
- 关于Mysql查询带单引号及插入带单引号字符串问题
- mysql查询空格问题
- mysql查询根据字符串位置排序问题
- mysql查询字符串数据区分大小写问题
- mysql字符串查询大小写问题2
- 关于Mysql查询带单引号及插入带单引号字符串问题
- MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法
- mysql查询出现ambiguous的问题
- MySql 查询语句中包含中文,日志打印为乱码问题解决
- SQLite对字符串字段建立索引后查询速度无优化的问题
- MySQL查询全部数据集结果不一致问题解决方案
- MySQL字符集中文乱码终极解决方案和mysql查询中文问题解决方法[转贴]
- mysql 查询不等于问题