だから、ちょうどIDだけのテーブルがintであると言うことができます。私はそれを発見した:MySQLの整数比較で末尾のアルファベット文字が無視される
SELECT *
FROM table
WHERE ID = '32anystring';
明らかに32!= '32anystring'。
これは非常に奇妙なようです。それはなぜこれをするのですか?それはオフにすることはできますか?最善の回避策は何ですか?
だから、ちょうどIDだけのテーブルがintであると言うことができます。私はそれを発見した:MySQLの整数比較で末尾のアルファベット文字が無視される
SELECT *
FROM table
WHERE ID = '32anystring';
明らかに32!= '32anystring'。
これは非常に奇妙なようです。それはなぜこれをするのですか?それはオフにすることはできますか?最善の回避策は何ですか?
文字列を数値に変換するときに、先行する数字を数値として解釈するのは、ほとんどのプログラミング言語で一般的な動作です。
これを処理するためのいくつかの方法があります。
使用して文を準備し、あなたが数値型である値を入れているプレースホルダを定義します。これにより、文字列がまったく入れられなくなります。
アプリケーションの上位層で入力を検証し、数字であることを確認します。
は(私はちょうど私が常にちょうどクエリを実行する前に、適切な検証システムを導入してきたように、実際にそれを試したことがない、これがうまくいくことを推測している)MySQLでBINARYキーワードを使用します -
SELECT *
FROM table
WHERE BINARY ID = '32anystring';
あなたが上で動作、または2つの異なるタイプを比較するときは、この
http://dev.mysql.com/doc/refman/5.1/en/type-conversion.html
'1.23def' * 2
=> 2.46)のMySQL変換は、有効な数値である限り、できるだけ文字列を解析します。最初の文字を数字の一部にすることができない場合、結果は0になります。
これは(少なくとも私のバージョンでは)少し間違っています。 SELECT 'abc123def' * 2 => 0、先頭の文字を削除すると機能します。 – therealsix
@therealsix /ありがとう。私はそれが最初のブロックで機能していると思った。 – RichardTheKiwi