mysql字段转隐什么意思_MySQL类型隐式转换规则

本文深入探讨MySQL中的数据类型转换机制,包括数值与字符串之间的隐式转换、比较操作符的使用及Where语句中的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在MySQL语句里,如果操作符应用于不同的类型的操作数,为了兼容让操作数兼容,MySQL会对操作数做类型转换,有些是自动的隐式转换。

“+”号操作符

使用“+”号相加的是字符串或字符串和数字,字符串会隐式转换为数字。

以数字开头的字符串

以数字开头的字符串,它会截取前面的数字字符串,转换为对应的数字。mysql> select '1a' + 1;

+----------+

| '1a' + 1 |

+----------+

|    2 |

+----------+

1 row in set, 1 warning (0.00 sec)

字符串'1a'转换为数字1。并且有一条警告提示。mysql> show warnings;

+---------+------+----------------------------------------+

| Level  | Code | Message                |

+---------+------+----------------------------------------+

| Warning | 1292 | Truncated incorrect DOUBLE value: '1a' |

+---------+------+----------------------------------------+

1 row in set (0.00 sec)

使用show  warnings查看警告,提示Truncated incorrect DOUBLE value: '1a',意思是对‘1a’做了截取

以字符开头的字符串

以字符开头的字符串,使用加号相加时会把字符串转换为0。mysql> select 'a1' + 1;

+----------+

| 'a1' + 1 |

+----------+

|    1 |

+----------+

1 row in set, 1 warning (0.00 sec)

这里把“1a”改为“a1”,字符串“a1”被转换为了0。

字符连接函数CONCAT()mysql> SELECT CONCAT(1,' test');

+-------------------+

| CONCAT(1,' test') |

+-------------------+

| 1 test      |

+-------------------+

1 row in set (0.03 sec)

使用CONCAT函数连接多个字符串时,对于数字,它会自动隐式转换为字符串。

比较操作符

使用比较操作符比较数字与字符串时,字符串类型会隐式转换为数字。

示例mysql> SELECT 1 > '6x';

0

mysql> SELECT 7 > '6x';

1

mysql> SELECT 0 = 'x6';

-> 1

mysql> SELECT 'a' = '0';

0

使用>,

以字符开头的字符串,字符串即使包含了数字,也会转换为0。

字符串与字符串的比较,即使是纯数字的字符串,这种情况下不做类型转换,如例子里的'a' = '0'

Where语句里的隐式转换

在Where语句里使用SELECT * FROM tbl_name WHERE str_col=数字;

示例SELECT * FROM user WHERE name = 0;

由于等式比较name=0,name会自动转换为0,所以name=0的结果为true。SELECT 语句会返回所有的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值