mysql日期隐式转换_MySQL 隐式转换 | 剑花烟雨江南

MySQL 隐式转换的规则如下:

1. 两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 <=> 对两个 NULL 做比较时会返回1,这两种都不需要做类型转换。

2. 两个参数都是字符串,会按照字符串来做比较,不做类型转换。

3. 两个参数都是整数,按照整数来比较,不做类型转换。

4. 十六进制的值和非数字做对比时,会被当做二进制串。

5.  有一个参数是 TIMESTAMP 或者 DATETIME 时,并且另外一个参数是常量,常量会被转换为 TIMESTAMP。

6.  有一个参数是 decimal 类型,如果另外一个是 decimal 或者整数,会将整数转换为 decimal 后进行比较;如果另外一个参数浮点数,则会把 decimal 转换为浮点数进行比较。

7.  所有其他情况下,两个参数都会被转换为浮点数再进行比较。

问题描述

where 条件语句里,字段属性和赋给的条件,当数据类型不一样,这时候是没办法进行直接比较的,需要进行一致性转换。

默认的转换规则为:

不同类型全部都转换为浮点型

如果字段是字符,条件是整型,那么会把表中的字段全部转换为整型。

转换总结

字符转整型

1. 字符开头的一律为0

2. 数字开头的,直接截取到第一个不是字符的位置

时间类型转换

1. date 转 datetime 或者 timestamp

追加 00:00:00

2. date 转 time

无意义,直接为 00:00:00

3. datetime 或者 timestamp 转 date

直接截取 date 字段

4. datetime 或者 timestamp 转 time

直接截取 time 字段

5. time 转 datetime 或者 timestamp

按照字符串进行截取

6. time 和 datetime 转换为数字时,会变为双精度,加上ms(版本不同有区别)

案例分析

以如下表结构为例:

CREATE TABLE `user` (

`id` int(11) NOT NULL,

`c1` int(11) NOT NULL,

`name` varchar(100) NOT NULL DEFAULT 'fajlfjalfka',

KEY `name` (`name`),

KEY `id` (`id`)

) ENGINE=InnoDB

执行如下查询:

select * from user where name = 0;

结果如下:

a26f880b06121dd5986b4defd9820c24.png

解释:

条件中的 0 为整数,MySQL 会将 name 的值自动转换为整数类型,进行比较,返回的结果是所有行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值