حسنًا، لماذا يؤدي البحث عن طريق "2" أو "2" إلى إرجاع نفس السجل؟

StackOverflow https://stackoverflow.com/questions/2577511

سؤال

اعذرني على سؤالي الجديد، ولكن لماذا يؤدي العثور على "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. لن يحدث هذا مع أنواع بيانات السلسلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top