wybacz moje pytanie dla początkujących, ale dlaczego znalezienie przez "2" lub "2" w Mysql zwraca ten sam rekord?
Na przykład:
Powiedzmy, że mam rekord z polem łańcucha o nazwie "ślimak", a wartość to "2". Następujące SQL zwraca ten sam rekord.
SELECT * From articles WHERE slug="2"
SELECT * From articles WHERE slug="2"
Odpowiedzi:
13 dla odpowiedzi nr 1Ma to związek ze zbiorem bazy danych:
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)
0 dla odpowiedzi nr 2
nie powinni zwracać tego samego wiersza dla równości, ale jeśli używasz like
prawdopodobnie otrzymujesz ten sam wiersz. za pomocą like
mysql użyje dopasowania rozmytego, więc 2 i 2 będą takie same (czy wszystkie są formą 2, czyż nie?)
0 dla odpowiedzi № 3
Jaki jest typ ślimaka? myślę, że jest to numeryczna. Jeśli tak, to tutaj mysql przesyła ją do int, a wszelkie sposoby "2" lub "2" staną się 2. To się stanie z typami ciągów.