9

SQL DB で理解できない非常に奇妙な動作があります (MySQL 5.5.8 を使用しています)。

テーブルに varchar(10) という名前があります: joe.

次のようなSQLを実行する場合:

SELECT ID FROM `names` WHERE `name` = 'joe '

1 つの結果: joe が得られますが、テーブルには「joe」がないため、これは間違っています (末尾にスペースがあります。「joe」しかありません (スペースなし))。

ただし、実行すると:

SELECT ID FROM `names` WHERE `name` LIKE 'joe '

私は期待どおりに得ます:何もありません。私の知る限り、 = は「完全に」一致する必要がありますが、 like はより緩く、サブ文字列と % で使用できます。

何が欠けていますか?

4

2 に答える 2

11

末尾のスペースは、CHARまたはVARCHARを使用した比較では重要ではありません=文字列比較関数を参照してください:

特に、末尾のスペースは重要です。これは、= 演算子で実行される CHAR または VARCHAR の比較には当てはまりません。

mysql> SELECT 'a' = 'a ', 'a' LIKE 'a ';
+------------+---------------+
| 'a' = 'a ' | 'a' LIKE 'a ' |
+------------+---------------+
|          1 |             0 |
+------------+---------------+
1 row in set (0.00 sec)
于 2013-02-25T16:22:29.360 に答える
0

これは、使用しているデータ型が原因だと思います。

CHAR 型と VARCHAR 型は似ていますが、保存方法と取得方法が異なります。MySQL 5.0.3 の時点では、最大長と末尾のスペースが保持されるかどうかも異なります。

http://dev.mysql.com/doc/refman/5.0/en/char.html

于 2013-02-25T16:22:41.703 に答える