关于Mysql类型的隐式转换你知道吗?

环境:Mysql5.7
你知道下边sql的执行结果吗?

//注意:这里id是int类型的
SELECT * from company_info WHERE id = '5 OR 1=1'

其实我能猜到,如果执行不出错的话大概能猜到查询结果是啥,结果等价于:

SELECT * from company_info WHERE id = 5

这是为什么呢?
查了一下是Mysql类型的隐式转换的原因。

//字符串中是纯数字
select 1 + '2' => select 3 

//字符串中有前导空格,忽略空格
SELECT * from company_info WHERE id = ' 3'; 

//字符串包含除数字字符以外的任何字符(例如字母、符号或特殊字符),MySQL将尝试转换字符串中尽可能多的数字字符,然后忽略剩余的字符。转换将在遇到第一个非数字字符时停止
SELECT * from company_info WHERE id = '5 OR 1=1';
=SELECT * from company_info WHERE id = '5';

//如果字符串为空或只包含空格,MySQL通常会将其转换为整数0
SELECT * from company_info WHERE id = ' ';

//时间相关
SELECT DATE_ADD('2024-01-01', INTERVAL '1' DAY); 结果为'2024-01-02'
SELECT CONVERT('2024-01-01', DATETIME);结果为'2024-01-01 00:00:00'

注意字段类型是前提~~~
我还是太菜了呀~~~
赶紧滚去学习咯~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值