1

これは私が気付いた奇妙な癖のようなものであり、なぜそれが起こっているのかについて誰かが洞察を提供できるかどうかを本当に知りたかっただけです。

varchar(x)である「アカウント」と呼ばれるフィールドがあるとしましょう

これらの2つのクエリは、同じ結果セットを返します。

SELECT * FROM table WHERE account = 1234;
SELECT * FROM table WHERE account LIKE '1234%';

古いデータを移行するために作成したスクリプトで偶然これに遭遇し、誤って文字列をカプセル化するのを忘れました。

この動作が発生する理由を誰かに教えてもらえますか?


アップデート:

これについて十分に説明していないように思われるので、サンプルテーブルを提供します。

table_name:id-INTアカウント-varChar(50)

エントリ:

ID - account
1 - "1"
2 - "12"
3 - "123"
4 - "1234"

それで:

1:

SELECT * FROM table_name WHERE account LIKE '1%'

エントリ1、2、3、4を返します

2:

SELECT * FROM table_name WHERE account = 1

エントリ1、2、3、4を返します

3:

SELECT * FROM table_name WHERE account = '1'

エントリ1を返します

1が2と同じである理由、および2が3と同じでない理由

4

3 に答える 3

3

http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html

「...MySQL は、必要に応じて数値を文字列に自動的に変換します。また、その逆も同様です。」

于 2012-10-30T17:05:02.590 に答える
3

これは、% がゼロ文字を含む任意の数の文字を意味するメタ文字であるためです。Likeキーワードは 1234 で始まるパターンを探します。account = 1234 も条件に一致するため、同じ結果が得られます。

于 2012-10-30T17:05:54.643 に答える
1

この時点で、これは MYSQL のバグとして発見されたと思います。バグ レポート ID #67427 を提出しました。更新に興味がある場合は、http://bugs.mysql.com/ から参照するように指示します

于 2012-10-30T20:22:39.503 に答える