比较字符串与数字字段返回意外结果

Chr*_*ker 6 php mysql sql

鉴于表:

CREATE TABLE IF NOT EXISTS `users` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Run Code Online (Sandbox Code Playgroud)

添加几行:

INSERT INTO `users` (`id`,`name`) VALUES (NULL , 'Bob'),(NULL , 'Larry'),(NULL , 'Steve');
Run Code Online (Sandbox Code Playgroud)

为什么,OH为什么!此查询是否返回结果:

SELECT * FROM `users` WHERE id = "2this-is-not a numeric value"
Run Code Online (Sandbox Code Playgroud)

结果:

query returned 1 row(s) in 0.0003 sec
id  name
-----------------
2   Larry
Run Code Online (Sandbox Code Playgroud)

where子句中使用的字符串显然被转换为数值 - 谁说这样做?!我找不到任何暗示mysql或PHP会假定自动转换我的字符串文字的文档.

这仅在数字字符是字符串中的第一个字符时才有效,"this 2 is not numeric"不会返回结果."12 2"会变成12,"1 2"(一空二)成为1.

任何解释此行为的文章或文档将不胜感激.

Sco*_*ers 10

它位于MySQL文档中:http: //dev.mysql.com/doc/refman/5.1/en/type-conversion.html

  • 太好了,现在我需要一个PHP/JS-esq` ===`运算符,呵呵 (2认同)