6

テーブルを考えると:

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 ;

いくつかの行を追加します。

INSERT INTO `users` (`id`,`name`) VALUES (NULL , 'Bob'),(NULL , 'Larry'),(NULL , 'Steve');

なぜ、ああ、なぜ!このクエリは結果を返しますか:

SELECT * FROM `users` WHERE id = "2this-is-not a numeric value"

結果:

query returned 1 row(s) in 0.0003 sec
id  name
-----------------
2   Larry

where 句で使用されている文字列は明らかに数値に変換されています。mysql または PHP が文字列リテラルを自動キャストすると推定することを示唆するドキュメントが見つかりません。

これは、数字が文字列の最初の文字である場合にのみ機能し、"this 2 is not numeric"結果は返されません。(ワンスペースツー)となり"12 2"ます。12"1 2"1

この動作を説明する記事やドキュメントをいただければ幸いです。

4

1 に答える 1

10

ここのMySQLドキュメントにあります: http://dev.mysql.com/doc/refman/5.1/en/type-conversion.html

于 2012-06-13T18:19:48.187 に答える