حسنًا، لماذا يؤدي البحث عن طريق "2" أو "2" إلى إرجاع نفس السجل؟
-
24-09-2019 - |
سؤال
اعذرني على سؤالي الجديد، ولكن لماذا يؤدي العثور على "2" أو "2" في MySQL إلى إرجاع نفس السجل؟
على سبيل المثال:
لنفترض أن لدي سجلًا يحتوي على حقل سلسلة يسمى "slug"، والقيمة هي "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)
نصائح أخرى
فلا ينبغي لهم إرجاع نفس الصف للمساواة، ولكن إذا كنت تستخدم like
ربما تحصل على نفس الصف.استخدام like
سيستخدم MySQL المطابقة الغامضة، لذا فإن 2 و 2 سيكونان متماثلين (بعد كل شيء، كلاهما شكل من أشكال 2، أليس كذلك؟)
ما هو نوع البيانات من Slug؟ أعتقد أن الرقم. إذا كان الأمر كذلك هنا ، فسيصبح MySQL INT ، وأي طريقة "2" أو "2" ستصبح 2. لن يحدث هذا مع أنواع بيانات السلسلة.
لا تنتمي إلى StackOverflow