MySQL自动将字符串转换/转换为数字?

yos*_*ssi 4 mysql type-conversion casing

MySQL会自动转换\将字符串转换为数值吗?
这种转换如何运作?

  • '1234'= 1234?
  • '1abc'= 1?
  • 'text'= 1?

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

SELECT table.* 
FROM table 
WHERE id='text'
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 6

前三个问题的答案是:是,是,否.

当字符串'text'转换为数字时,它将成为值0.

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

对于您的查询:

SELECT table.* 
FROM table 
WHERE id='text';
Run Code Online (Sandbox Code Playgroud)

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

在所有其他情况下,参数被比较为浮点(实数).

换句话说,这实际上相当于:

WHERE id = 0.0
Run Code Online (Sandbox Code Playgroud)


Sam*_*Sam 5

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

set @@GLOBAL.sql_mode  = "STRICT_ALL_TABLES";
set @@SESSION.sql_mode = "STRICT_ALL_TABLES";
Run Code Online (Sandbox Code Playgroud)

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