MySQL 中关于查询条件中的字符串空格问题

红薯 发布于 2009/05/06 17:12
阅读 4K+
收藏 1

前提:有一个用户表 osc_users ,其中有一个 loginname  字段,类型为 varchar(50),该表中有一个登录名为ld的用户

请看下面这两个SQL语句:

select osc_users where loginname='ld空格'
select osc_users where loginname like 'ld空格'

第一个查询语句可以返回登录名为ld的记录,而第二个返回空记录

这就是 MySQL 对这两个查询语句的处理方式的差别,其他数据库没有试验过,尚不清楚,有兴趣的朋友请试试。

加载中
0
JavaGG
JavaGG

怪事呀...

0
王健
王健

应该有办法解决

0
指点江山
指点江山

您试试: select osc_users where loginname like BINARY 'ld空格'

0
逝水fox
逝水fox

官方文档上说是MySQL校对规则属于PADSPACE,对CHARVARCHAR值进行比较都忽略尾部空格,和服务器配置以及MySQL版本都没关系

select osc_users where loginname='ld空格'能查到ld

反之也可以

select osc_users where loginname='ld' 查到 登录名为'ld空格'的用户

0
aaron67
aaron67

引用来自“YiChen”的答案

官方文档上说是MySQL校对规则属于PADSPACE,对CHARVARCHAR值进行比较都忽略尾部空格,和服务器配置以及MySQL版本都没关系

select osc_users where loginname='ld空格'能查到ld

反之也可以

select osc_users where loginname='ld' 查到 登录名为'ld空格'的用户

您好,我跟楼主遇到了同样的问题,您说的官方文档有链接么,想看看,谢谢~
aaron67
aaron67
@逝水fox : 好的,十分感谢 :)
逝水fox
逝水fox
@Continue; ;: 直接看oschina主页右下角的mysql中文文档吧. 11.4.1.小节有说的
aaron67
aaron67
@逝水fox : 抱歉才恢复您的消息,十分感谢您的指点,我现在机器上装了一个 MySQL 5.1.53,里面没有您说的相应目录,我会弄清楚这个问题的,十分感谢 :)
逝水fox
逝水fox
MySQL安装目录下有个doc目录(Windows),里面的 Data Types -> String Types -> The CHAR and VARCHAR Types 这一小节有对这个问题的说明以及相关的例子(版本不一样可能章节的编号可能有变动,还是看标题吧): All MySQL collations are of type PADSPACE. This means that all CHAR and VARCHAR values in MySQL are compared without regard to any trailing spaces.
0
aaron67
aaron67

楼主,想问下您的问题最后是怎么解决的。

既然Mysql忽略字符串尾的空格,那精确匹配要怎么做呢,如果用户在字符串尾输入空格,而数据库中没有字符串尾空格的话

0
linzuxiong
linzuxiong
怎么解决? 
0
linzuxiong
linzuxiong

to mail : 

linzuxiong1988@gmail.com

返回顶部
顶部