うーん、なぜ同じレコードを返す「2」または「2」で発見?
-
24-09-2019 - |
質問
私の初心者の質問を許すが、なぜMySQLでは「2」または「2」で見つけることは、同じレコードを返しますか?
例えば、
と言う私は、「スラグ」という名前の文字列フィールドを持つレコードを持って、その値が「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
を使用する場合は、おそらく同じ行を取得しています。 2,2が同じになるように、ファジーマッチングを使用するlike
のMySQLを使用して(すべてのafer彼らは、2の形態の両方ですね。)
スラグのデータ型とは何ですか?私は、その数字の1を考えます。ので、ここでmysqlのint型にキャストしないと、いずれの方法で「2」または「2」は2になります。これは、文字列データ型で起こる文句を言わない。
もし所属していません StackOverflow