MySQL 的隐式转换

背景

当我们对不同类型的值进行比较的时候,MySQL为了使得这些数值可比较(也可以称为类型的兼容性), 会自动做一些隐式转换(Implicit type conversion)那么,mysql是怎么进行类型转换的呢?
官方文档:表达式求值中的类型转换

1. 字符串转数字:

  1. 若字符串是以数字开头,并且全部都是数字,则转换的数字结果是整个字符串;部分是数字,则转换的数字结果是截止到第一个不是数字的字符为止
  2. 若字符串不是以数字开头,则转换的数字结果是 0
select '123abc' + 1 // 124
select 'abc123' + 2 // 2
select 2 > '1' // 1
select 2 > '3' // 0
select 2 > '3a' // 0
select 2 > '1a' // 1
select 0 = 'x6' // 1

隐式转换的规则:

  • 如果一个或两个参数是NULL,则比较的结果是NULL,但 <=>相等比较运算符除外。对于NULL <=> NULL,结果为真,无需转换。

  • 如果比较操作中的两个参数都是字符串,则将它们作为字符串进行比较。

  • 如果两个参数都是整数,则将它们作为整数进行比较。

  • 如果不与数字比较,十六进制值将被视为二进制字符串。

  • 如果其中一个参数是TIMESTAMPDATETIME列,而另一个参数是常量,则在执行比较之前将常量转换为时间戳。为了安全起见,在进行比较时,请始终使用完整的日期时间、日期或时间字符串。例如,要在使用BETWEEN日期或时间值时获得最佳结果,请使用CAST()将值显式转换为所需的数据类型。

  • 如果其中一个参数是十进制值,则比较取决于另一个参数。如果另一个参数是十进制或整数值,则将参数作为十进制值进行比较,如果另一个参数是浮点值,则将其作为浮点值进行比较。

  • 在所有其他情况下,参数将作为浮点(双精度)数字进行比较。例如,字符串和数字操作数的比较是作为浮点数的比较进行的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 书名看到过好多次推荐,清茶分享的书单里有,最近没啥特别想看的,就打开了它。读得不那么认真,记住了两个高频词,一个“...
    燕归来2021阅读 1,424评论 2 2
  • 今天突然看到“简书”这个平台,我才意识到自己曾经也用过简书,记得那是21年8月份,我还在准备考研,如今已经是22年...
    ice_Cris阅读 107评论 0 1
  • 昨天接到通知,今天全员核酸,要求应检尽检。这样大规模的检测,估摸着又是附近哪里出现了阳性。 果不其然,今天看到疫情...
    冰凘阅读 106评论 0 0
  • 徐丽红2022--4--19 中原焦点网络28期中级郑州坚持享第250天 看北大暖姐录制的从单亲妈妈到中科院+北大...
    3902870da60e阅读 453评论 0 1
  • 我是闭家锁,最近的创作^^
    7b1cf1933e5a阅读 43评论 0 0