我正在做一个项目,由于误解,我们最终将存储的 int 与 MySql 数据库中的字符串进行了比较。我进行了一些测试,它似乎有效,但我想知道 MySql 如何比较不同的数据类型。
它是否将一种转换为另一种?如果确实如此,它会将两者都转换为字符串还是整数?
我正在做一个项目,由于误解,我们最终将存储的 int 与 MySql 数据库中的字符串进行了比较。我进行了一些测试,它似乎有效,但我想知道 MySql 如何比较不同的数据类型。
它是否将一种转换为另一种?如果确实如此,它会将两者都转换为字符串还是整数?
当您在整数上下文中使用字符串时,例如在算术表达式或与整数的比较中,MySQL 将该字符串的数值作为 DOUBLE 数据类型。
见https://dev.mysql.com/doc/refman/5.7/en/type-conversion.html
示范:
mysql> create table foo as select 1+'1' as x;
mysql> show create table foo\G
CREATE TABLE `foo` (
`x` double NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1
字符串的数值是任何前导数字字符或构成浮点数的其他字符的数值,例如-+.e
.
例如, 的数值'123abc'
是 123。
支持科学计数法。
mysql> select 1 + '5e-2xyz' as n;
+------+
| n |
+------+
| 1.05 |
+------+
如果没有构成数值的前导字符,则字符串的数值为 0。
Mysql 手册有一个专门用于此的完整部分,称为表达式评估中的类型转换。
当运算符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。一些转换是隐式发生的。例如,MySQL 会根据需要自动将数字转换为字符串,反之亦然。
如果将 int 与字符串进行比较,则两个值都将转换为浮点数并进行比较。