Hmm, perché trovare da '2' o '2' tornare lo stesso record?
-
24-09-2019 - |
Domanda
perdona la mia domanda newbie, ma perché trovare da '2' o '2' in MySQL restituisce lo stesso disco?
Ad esempio:
Di 'Ho un record con campo di stringa denominata 'lumaca', e il valore è '2'. E il seguente sqls rendimenti stesso record.
SELECT * From articles WHERE slug='2'
SELECT * From articles WHERE slug='2'
Soluzione
Ha a che fare con le regole di confronto del database:
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)
Altri suggerimenti
non tornare sulla stessa riga per l'uguaglianza, ma se si utilizza like
si sono probabilmente sempre sulla stessa riga. utilizzando like
mysql utilizzerà corrispondenza fuzzy, quindi 2 e 2 sarà lo stesso (afer tutto sono entrambi una forma di 2, non sono?)
Qual è il tipo di dati di lumaca? penso proprio quella numerica. Se ecco mysql fa cast a int, e diventerà eventuali modi '2' o '2' 2. Questo non succederà con i tipi di dati stringa.