加入收藏 | 设为首页 | 会员中心 | 我要投稿 广州站长网 (https://www.020zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

如何解决Mysql数据库中sql语句的where条件中文本匹配问题

发布时间:2022-01-11 13:28:58 所属栏目:MySql教程 来源:互联网
导读:这篇文章主要介绍如何解决Mysql数据库中sql语句的where条件中文本匹配问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! Mysql数据库中sql语句中where条件中文本匹配问题 问题描述 字段name类型为varchar时(CHAR,VARCHAR和TEX
        这篇文章主要介绍如何解决Mysql数据库中sql语句的where条件中文本匹配问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
 
      Mysql数据库中sql语句中where条件中文本匹配问题
 
问题描述
 
      字段name类型为varchar时(CHAR,VARCHAR和TEXT情况都一样),
 
语句一
 
select * from aaa where name='a';
 
语句二
 
select * from aaa where name='a ' ;
 
结果一样:不能区分末尾是否有空格,
 
建议:
 
1、如果必须精确匹配(包括大小写和末尾空格)建议转换成二进制比较,使用select * from aaa where name=BINARY'a ' ;
 
2、如果需要精确校验末尾是否有空格,但是保留大小写模糊匹配(默认校对规则_ci大小写不敏感),建议增加length(name)就可以比较出长度来区分
 
3、如果需要精确校验大小写,但是保留末尾空格忽略,可以使用select * from aaa where name='a' collate utf8_cs; (字符为utf8)
 
4、默认设置情况下,
 
a、where name='a';
 
b、where name='a ';(末尾有空格)
 
c、where name='A';
 
b、where name='A ';(末尾有空格)
 
四中情况匹配的结果是一样的,
 
经查询官方文档:
 
所有MySQL归类都是PAD SPACE类型。 这意味着所有CHAR,VARCHAR和TEXT值都会进行比较,而不考虑任何尾随空格。 在此上下文中的“比较”不包括LIKE模式匹配运算符,其尾部空格是重要的。 例如:
 
mysql> CREATE TABLE names (myname CHAR(10));
 
Query OK, 0 rows affected (0.03 sec)
 
mysql> INSERT INTO names VALUES ('Monty');
 
Query OK, 1 row affected (0.00 sec)
 
mysql> SELECT myname = 'Monty', myname = 'Monty ' FROM names; +------------------+--------------------+
 
| myname = 'Monty' | myname = 'Monty ' |
 
+------------------+--------------------+
 
 | 1 | 1 |
 
+------------------+--------------------+
 
 1 row in set (0.00 sec)
 
mysql> SELECT myname LIKE 'Monty', myname LIKE 'Monty ' FROM names; +---------------------+-----------------------+ |
 
 myname LIKE 'Monty' | myname LIKE 'Monty ' |
 
 +---------------------+-----------------------+
 
| 1 | 0 |
 
+---------------------+-----------------------+
 
 1 row in set (0.00 sec)
 
对于所有MySQL版本都是如此,并且不受服务器SQL模式的影响。
 
注意
 
有关MySQL字符集和归类的更多信息,请参阅第10章,字符集,归类,Unicode。 有关存储要求的更多信息,请参见第11.7节“数据类型存储要求”。
 
对于尾随填充字符被去除或比较忽略它们的情况,如果列的索引需要唯一值,则插入到仅与尾部填充字符数不同的列值中将导致重复键错误。 例如,如果一个表包含'a',则尝试存储'a'会导致重复键错误。
 
以上是“如何解决Mysql数据库中sql语句的where条件中文本匹配问题”这篇文章的所有内容,感谢各位的阅读!

(编辑:广州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读