0

我正在做一个项目,由于误解,我们最终将存储的 int 与 MySql 数据库中的字符串进行了比较。我进行了一些测试,它似乎有效,但我想知道 MySql 如何比较不同的数据类型。

它是否将一种转换为另一种?如果确实如此,它会将两者都转换为字符串还是整数?

4

2 回答 2

3

当您在整数上下文中使用字符串时,例如在算术表达式或与整数的比较中,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。

于 2017-04-02T21:08:52.037 回答
2

Mysql 手册有一个专门用于此的完整部分,称为表达式评估中的类型转换

当运算符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。一些转换是隐式发生的。例如,MySQL 会根据需要自动将数字转换为字符串,反之亦然。

如果将 int 与字符串进行比较,则两个值都将转换为浮点数并进行比较。

于 2017-04-02T21:10:04.150 回答