Хм, почему нахождение '2' или '2' возвращает ту же запись?

простите мой вопрос о новичке, но почему нахождение '2' или '2' в Mysql возвращает ту же запись?

Например:

Скажите, что у меня есть запись со строковым полем, названным 'кратким заголовком', и значение является '2'. И следующий SQLs возвращает ту же запись.

SELECT * From articles WHERE slug='2'  
SELECT * From articles WHERE slug='2' 
9
задан Deduplicator 19 September 2015 в 03:25
поделиться

3 ответа

Это связано с сопоставлением вашей базы данных:

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)
13
ответ дан 4 December 2019 в 15:13
поделиться

Какой тип данных у slug? я думаю, его числовой. Если это так, то здесь mysql преобразует его в int, и любые способы '2' или '2' станут 2. Этого не произойдет со строковыми типами данных.

0
ответ дан 4 December 2019 в 15:13
поделиться

они не должны возвращать одну и ту же строку для равенства, но если вы используете как , вы, вероятно, получите ту же строку. при использовании , например mysql будет использовать нечеткое сопоставление, поэтому 2 и 2 будут одинаковыми (ведь они оба являются формой 2, не так ли?)

0
ответ дан 4 December 2019 в 15:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: