質問

私の初心者の質問を許すが、なぜ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になります。これは、文字列データ型で起こる文句を言わない。

もし
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top