흠, 왜 '2' 또는 '2'로 찾는 것이 동일한 레코드를 반환합니까?
-
24-09-2019 - |
문제
초보자 질문을 용서해 주세요. 그런데 왜 Mysql에서 '2' 또는 '2'로 검색하면 동일한 레코드가 반환됩니까?
예를 들어:
'slug'라는 문자열 필드가 있는 레코드가 있고 값이 '2'라고 가정해 보겠습니다.그리고 다음 SQL은 동일한 레코드를 반환합니다.
SELECT * From articles WHERE slug='2'
SELECT * From articles WHERE slug='2'
해결책
It has to do with the collation of your database:
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
아마도 같은 행을 얻게 될 것입니다.사용하여 like
mysql은 퍼지 매칭을 사용하므로 2와 2는 동일합니다. (둘 다 2의 형태라는 점만 빼면요. 그렇죠?)
What is the datatype of slug? i think its numeric one. If so here mysql does cast it to int, and any ways '2' or ' 2 ' will become 2. This wont happen with string datatypes.
제휴하지 않습니다 StackOverflow