社区
MySQL
帖子详情
mysql以数字开头的字符串字段,查询条件字段值等于特定数字时,为何查询结果为以数字开头的数据
weixin_41097949
2018-07-18 04:24:09
如有一表test:id, type;
数据如下:
1,3a;
2,3b;
3, 5s;
select * from test where type = 3;
得到的结果为:请问这是为什么?
1,3a;
2,3b;
...全文
847
7
打赏
收藏
mysql以数字开头的字符串字段,查询条件字段值等于特定数字时,为何查询结果为以数字开头的数据
如有一表test:id, type; 数据如下: 1,3a; 2,3b; 3, 5s; select * from test where type = 3; 得到的结果为:请问这是为什么? 1,3a; 2,3b;
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Rotel-刘志东
2018-07-19
打赏
举报
回复
数据类型不一样一定是做转换的,否则不同的类型怎么去对比比较。要把你的type类型转化为数字类型的。
zjcxc
2018-07-19
打赏
举报
回复
type=3
这两个的数据类型不一样,所以会转换为一样一类型再做比较,按照 mysql 的转换规则,会把 type 转成数字,而 3a,3b,3c 转成数字的结果就是 3,所以=3
你可以直接验证一下: select cast('3a' as signed);
同时,查询后执行 show warnings 时会看到相关的警告信息
weixin_41097949
2018-07-19
打赏
举报
回复
#5 zjcxc,您这么解释,我算通了,非常感谢。mysql做了转换,当查询条件为“字符串字段=数字”,mysql截取前端整数数字部分转换为整数型,再与给出的条件值比较。但mysql的这个规则不知是好还是不好。比如例中,按正常思维希望客户输入“3c”时才能看到“3c”这条记录,但客户输入3时,把“3a,3b,3c"都列出来了。
weixin_41097949
2018-07-18
打赏
举报
回复
二楼,您用 select * from test where type=3; 查询得出的结果是不是:
id type
1 3a
2 3b
3 3c
weixin_41097949
2018-07-18
打赏
举报
回复
感谢二位的热情解答,我的type是varchar型的,二楼您写的查询我能理解,我不能理解的是:我写的这个查询语句看起来应该是错误的,会报语法错误,或者查询结果为空,可结果是没有料想到的
iamboy_11
2018-07-18
打赏
举报
回复
根据你发的问题,我觉得应该这样写:
select * from test where type like '4%' 或者 select * from test where left(type,1) = 4
luyaran
2018-07-18
打赏
举报
回复
你的type的字段类型是什么啊?????
MySQL
数据
类型和运算符
Re:
MySQL
数据
类型和运算符=============================#
数据
类型 整数类型:五种 TINY SMALL MEDIUM INT BIG 浮点和定点小数类型:三种 FLOAT DOUBLE DECIMAL 日期与
时
间
数据
类型:五种 YEAR -1
字符串
类型:二种 CHAR(M) VARCHAR(M) -1 二进制
字符串
:位
字段
BIT 固定BINARY 可变VARBINARY -1 # 运算符 算术 运算符 比较 运算符 逻辑 运算符 位操作 运算符 运算符的优先级-------------------------------------
mysql
查询
字符串
类型的
字段
使用
数字
类型
查询
时
问题
问题
查询
记录表
数据
时
,出现有空格的脏
数据
:
数据
前面存在空格,如图 原因 当
MySQL
字段
类型和传入
条件
数据
类型不一致
时
,会进行隐形的
数据
类型转换; 若
字符串
是以
数字
开头
,且全部都是
数字
,则转换为
数字
结果是整个
字符串
; 部分是
数字
,则转换为
数字
结果是截止到第一个不是
数字
的字符为止。 理解: varchar str = “1111aaaa”,转换为
数字
是1111。 若
字符串
不是以
数字
开头
,则转换为
数字
结果是 0 。 varchar str = “aabb33” ; 转换为
数字
是 0 。 ...
mysql
使用
数字
字符串
查询
字符串
类型
字段
查询
结果不正确的问题
mysql
使用
数字
字符串
查询
字符串
类型
字段
查询
结果不正确的问题
mysql
在查
字符串
字段
中
条件
参数传为
数字
0查到与实际
数据
不匹配问题
select
字段
from t where a=0,这里
字段
写错了,偶然发现可以查出来非0的a
数据
。用
数字
查
字符串
会把
字符串
数据
转化为
数字
开头
,所有非
数字
开头
字符串
都是以0
开头
。本来要写的是select
字段
from t where b=0。工作中本来要
查询
一个只有0和1的
数据
(
字段
b)sql
条件
为0为什么查出来不为0的
数据
?
MySql
,以
数字
0作为
查询
条件
,
查询
字符串
字段
。如 select * from user where str=0;会查到str为‘0‘,‘0abc‘,‘abc‘等
数据
等问题。
如果你查一个varchar的
字段
,
条件
是
数字
的话,会把
字符串
数据
转化为
数字
开头
,所有非
数字
开头
字符串
都是以0
开头
。varchar的
值
就会截取非
数字
之前的
数字
作为
查询
结果。
字符串
abc 转化为 0abc。123abc 截取为 123 作为
查询
结果。1abc 截取为 1 作为
查询
结果。
MySQL
56,679
社区成员
56,709
社区内容
发帖
与我相关
我的任务
MySQL
MySQL相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MySQL相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章