Mysql——》数据类型隐式转换

本文详细探讨了MySQL在不同类型数据运算时的隐式转换规则,包括字符串转数字、数字转字符串的情况,并举例说明。同时,文章还介绍了官方文档中关于比较操作的数据类型转换规则,帮助理解MySQL在处理不同数据类型时的行为。了解这些规则对于数据库性能优化和正确使用索引至关重要。
摘要由CSDN通过智能技术生成

推荐链接:
    总结——》【Java】
    总结——》【Mysql】
    总结——》【Spring】
    总结——》【SpringBoot】

当两个不同类型的数据进行运算时,为了使得它们能够兼容,MySQL 可能会执行隐式的数据类型转换(Implicit type conversion)

一、MySQL 自动将字符串转换为数字

  • 字符串是以数字开头,且全部为数字,则转换的数字结果为整个字符串
  • 字符串是以数字开头,且部分为数字,则转换的数字结果为截止到第一个不是数字的字符
  • 字符串不是以数字开头,则转换的数字结果为0
-- 字符串以数字开头,且全部为数字
SET @str1 := '123';
SELECT @str1 = 123;-- 结果:1,代表true
SELECT @str1 = '123';-- 结果:1代表true
SELECT @str1 + 1;-- 结果:124

-- 字符串以数字开头,且部分为数字
SET @str2 := '123abc';
SELECT @str2 = 123;-- 结果:1,代表true
SELECT @str2 = '123';-- 结果:0,代表false
SELECT @str2 + 1;-- 结果:124

-- 字符串不是以数字开头
SET @str3 := 'abc123';
SELECT @str3 = 123;-- 结果:0,代表false
SELECT @str3 = '123';-- 结果:0,代表false
SELECT @str3 + 100;-- 结果:100


二、MySQL 使用函数将数字转换为字符

-- CAST()函数将数字显式转换为字符串
SELECT 1.1, CAST(1.1 AS CHAR);

-- CONCAT()函数将数字隐式转换为字符串
SELECT 1.1, CONCAT(1.1);

三、官方文档关于隐式转换的描述

【官方】type-conversion

以下规则描述了比较操作如何进行转换:

  • 两个参数中至少有一个是 null 时,比较的结果也是 null,另外使用 <=> 对两个 null 做比较时会返回 1,这两种情况都不需要做类型转换
  • 两个参数都是字符串,会按照字符串来比较,不做类型转换
  • 两个参数都是整数,按照整数来比较,不做类型转换
  • 十六进制的值和非数字做比较时,会被当做二进制串
  • 有一个参数是 timestamp 或者 datetime,并且另外一个参数是常量,常量会被转换为 timestamp
  • 有一个参数是 decimal 类型,如果另外一个参数是 decimal 或者整数,会将整数转换为 decimal 后进行比较,如果另外一个参数是浮点数,则会把 decimal 转换为浮点数进行比较
  • 其他情况下,两个参数都会被转换为浮点数再进行比较


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值