Hmm, warum die Suche nach ‚2‘ oder ‚2‘ zurückzukehren demselben Datensatz?
-
24-09-2019 - |
Frage
meine newbie Frage vergeben, aber warum von ‚2‘ oder ‚2‘ in Mysql gibt den gleichen Datensatz zu finden?
Zum Beispiel:
sagen, ich habe einen Datensatz mit String-Feld mit dem Namen ‚Slug‘, und der Wert ‚2‘. Und der folgende SQLs kehrt denselben Datensatz.
SELECT * From articles WHERE slug='2'
SELECT * From articles WHERE slug='2'
Lösung
Es hat mit der Zusammenstellung Ihrer Datenbank zu tun:
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)
Andere Tipps
Sie sollten nicht die gleiche Zeile auf Gleichheit zurück, aber wenn Sie like
verwenden Sie wahrscheinlich die gleiche Reihe zu bekommen. mit like
mysql wird Fuzzy Matching verwenden, also 2 und 2 werden das gleiche sein (afer alle sind sie beide eine Form von 2, nicht wahr?)
Was ist der Datentyp von Slug? Ich denke, seine numerischen ein. Wenn ja hier nicht mysql es int werfen und alle Möglichkeiten, ‚2‘ oder ‚2‘ werden worden 2. Dieses mit String-Datentypen passieren würde nicht.