分享更有价值
被信任是一种快乐

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

文章页正文上

这篇文章主要介绍如何解决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条件中文本匹配问题”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注云技术行业资讯频道!

相关推荐: Linux怎么用源码安装MySQL 5.7

这篇文章主要讲解了“Linux怎么用源码安装MySQL 5.7”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux怎么用源码安装MySQL 5.7”吧!有两种方法来使用源码安装MySQL:.使用一种标准的M…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册