初心者の質問は許してください。しかし、Mysqlで「2」または「2」で検索すると同じレコードが返されるのはなぜですか。
例えば:
'slug'という名前の文字列フィールドを持つレコードがあり、値が'2'であるとします。そして、次のSQLは同じレコードを返します。
SELECT * From articles WHERE slug='2'
SELECT * From articles WHERE slug='2'
初心者の質問は許してください。しかし、Mysqlで「2」または「2」で検索すると同じレコードが返されるのはなぜですか。
例えば:
'slug'という名前の文字列フィールドを持つレコードがあり、値が'2'であるとします。そして、次のSQLは同じレコードを返します。
SELECT * From articles WHERE slug='2'
SELECT * From articles WHERE slug='2'
それはあなたのデータベースの照合と関係があります:
mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
mysql> SELECT '2'='2';
+-----------+
| '2'='2' |
+-----------+
| 0 |
+-----------+
1 row in set (0.00 sec)
mysql> SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT '2'='2';
+-----------+
| '2'='2' |
+-----------+
| 1 |
+-----------+
1 row in set (0.00 sec)
それらは等しいために同じ行を返すべきではありませんが、使用するlike
場合はおそらく同じ行を取得しています。mysqlを使用like
すると、あいまい一致が使用されるため、2と2は同じになります(両方とも2の形式であるため、そうではありませんか?)
ナメクジのデータ型は何ですか?私はその数値だと思います。もしそうなら、ここでmysqlはそれをintにキャストし、「2」または「2」は2になります。これは文字列データ型では発生しません。