2017-02-13 3 views
2

以下は、32ビット長のvarchar文字列をUUIDとして含むMySQLデータベーステーブルへのSQLクエリの例です。 WHERE句には完​​全な文字列は含まれていませんが、MySQLは結果を返します。MySQLの型キャストバグまたは予想される動作?

UUID = 9

id uuid        name 
1 9c8f8632cbbac5b0708a9920f6fac755 John Smith 

が予想される動作これですとMySQLがフィールドの型と検索条件をキャストテーブルSELECT * FROMは?

+0

私は 'uuid'を文字列として格納されていることを推測しています。 –

+0

これは文字列です。 – Stanislav

答えて

3

MySQLは整数から文字列への暗黙の変換を行うようです。

mysql> select 9 = '9asdasd'; 
+---------------+ 
| 9 = '9asdasd' | 
+---------------+ 
| 1    | 
+---------------+ 
1 rows in set (0.02 sec) 

mysql> select 9 = '79asdasd'; 
+----------------+ 
| 9 = '79asdasd' | 
+----------------+ 
| 0    | 
+----------------+ 
1 rows in set (0.01 sec) 

どうやらあなたはこれを回避するために引用符があることを確認する必要があります。

mysql> select '9' = '9asdasd'; 
+-----------------+ 
| '9' = '9asdasd' | 
+-----------------+ 
| 0    | 
+-----------------+ 
1 rows in set (0.01 sec) 
3

これは予想される動作です。起こっているのは、文字列を整数と比較することです。この場合、の文字列は、先頭の数字に基づいて数値に変換されます。

最初の文字だけが数字なので、9に変換されます - 等価性が働きます。

関連する問題