/ / Hmm, dlaczego znalezienie przez "2" lub "2" zwraca ten sam rekord? - mysql, sql, unicode, sortowanie, unicode-normalizacja

Hmm, dlaczego znalezienie przez "2" lub "2" zwraca ten sam rekord? - mysql, sql, unicode, sortowanie, unicode-normalizacja

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 1

Ma 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.