10

MySQL 是否自动将字符串转换为数值?
这种转换是如何工作的?

  • '1234'=1234 ?
  • '1abc' = 1?
  • '文本' = 1 ?

鉴于它units.id是 bigint 类型,这个查询将如何解释?

SELECT table.* 
FROM table 
WHERE id='text'
4

3 回答 3

11

前三个问题的答案是:是、是、不是。

当字符串'text'转换为数字时,它变成了 value 0

描述类型转换的文档在这里

对于您的查询:

SELECT table.* 
FROM table 
WHERE id='text';

该规则由文档的以下摘录捕获:

在所有其他情况下,参数作为浮点(实)数进行比较。

换句话说,这实际上等价于:

WHERE id = 0.0
于 2014-02-13T18:29:30.447 回答
5

默认情况下,MySQL 将 1 和 '1' 视为相同,但是您可以通过将 MySQL 行为设置为 Strict 模式来更改它。

set @@GLOBAL.sql_mode  = "STRICT_ALL_TABLES";
set @@SESSION.sql_mode = "STRICT_ALL_TABLES";

或者您可以在 my.cnf 文件中将这些变量设置为永久保存在sql_mode = ''. 这样,如果使用了不正确的类型,MySQL 将抛出错误。阅读http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html了解更多详情

于 2014-02-13T18:10:53.690 回答
1

像任何 DBMS 一样,它进行隐式转换。

对于其他类型,根据 MySQL 文档,您必须使用 convert/cast 函数 http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html

这是来自 SO 的示例: 在 MySQL 查询中将文本转换为数字

于 2014-02-13T18:10:29.013 回答