простите мой вопрос о новичке, но почему нахождение '2' или '2' в Mysql возвращает ту же запись?
Например:
Скажите, что у меня есть запись со строковым полем, названным 'кратким заголовком', и значение является '2'. И следующий SQLs возвращает ту же запись.
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)
Какой тип данных у slug? я думаю, его числовой. Если это так, то здесь mysql преобразует его в int, и любые способы '2' или '2' станут 2. Этого не произойдет со строковыми типами данных.
они не должны возвращать одну и ту же строку для равенства, но если вы используете как
, вы, вероятно, получите ту же строку. при использовании , например
mysql будет использовать нечеткое сопоставление, поэтому 2 и 2 будут одинаковыми (ведь они оба являются формой 2, не так ли?)