9

初心者の質問は許してください。しかし、Mysqlで「2」または「2」で検索すると同じレコードが返されるのはなぜですか。

例えば:

'slug'という名前の文字列フィールドを持つレコードがあり、値が'2'であるとします。そして、次のSQLは同じレコードを返します。

SELECT * From articles WHERE slug='2'  
SELECT * From articles WHERE slug='2' 
4

3 に答える 3

13

それはあなたのデータベースの照合と関係があります:

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)
于 2010-04-05T08:38:21.710 に答える
0

それらは等しいために同じ行を返すべきではありませんが、使用するlike場合はおそらく同じ行を取得しています。mysqlを使用likeすると、あいまい一致が使用されるため、2と2は同じになります(両方とも2の形式であるため、そうではありませんか?)

于 2010-04-05T08:35:06.243 に答える
0

ナメクジのデータ型は何ですか?私はその数値だと思います。もしそうなら、ここでmysqlはそれをintにキャストし、「2」または「2」は2になります。これは文字列データ型では発生しません。

于 2010-04-05T08:35:34.233 に答える