문제

초보자 질문을 용서해 주세요. 그런데 왜 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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top