アルファベット文字が整数値に追加されたときにMySQLが誤検出を検出しないようにするにはどうすればよいですか?INT(11)フィールドのid = '2bar'はfalse positive id = 2を返します
CREATE TABLE `mytable` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `mytable`
ADD PRIMARY KEY (`id`);
そして、このクエリ:
は、この表を与えていることが判明した結果id=2
OK働くと示し
SELECT * FROM `mytable` WHERE `id`='2'
。しかし、私は、クエリで '2abc'の文字列値もその行を返すことに気づいた:偽陽性。私はむしろクエリが失敗し、それが見つからなかったことを示すようになりますid
mytable
..
これは、クエリを実行する前に値が有効な整数であることを確認することで回避できますが、将来の目的で文字列と互換性があります。
https://dba.stackexchange.com/questions/89760/prevent-mysql-from-mangling-queries-by-casting-string-to-intとhttp://stackoverflow.com/questionsを参照してください。/207082 53/prevent-mysql-casting-string-int-where-where節 –
これは、文書https://dev.mysql.com/doc/refman/5.7/en/type-conversion.htmlに詳しく記載されています。 'これは、' 1 '、' 1 '、' 1a 'など、値1に変換される可能性があるさまざまな文字列が存在するためです。 '明示的な型キャストがなければ、文字列を整数に変換し、' 2abc'は2になり、 '2 = 2 => 'になります。これはサイレント変換' select' 2ab '+ 0; => 2 'しかし 'select' ab2 '+ 0 => 0' –
@AbhikChakrabortyあなたが答えとしてあなたのコメントを追加すれば、私はあなたがクレジットを得るようにそれを受け入れます。 –