Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL 5.5 क्वेरी में अनुगामी रिक्त स्थान खो रहा है

यह व्यवहार केवल MySQL में ही नहीं, डिज़ाइन द्वारा है।

आप इसके आसपास तुलना . में काम कर सकते हैं BINARY . का उपयोग करके :

mysql> select version(), 'a' = 'a ', BINARY 'a' = BINARY 'a ';
+-------------+------------+--------------------------+
| version()   | 'a' = 'a ' | BINARY 'a' = BINARY 'a ' |
+-------------+------------+--------------------------+
| 5.5.25a-log |          1 |                        0 |
+-------------+------------+--------------------------+
1 row in set (0.00 sec)

लेकिन बहुत अधिक नहीं। इससे आपको SELECT . में मदद मिलेगी s यदि व्हाइटस्पेस दिखाई देते हैं उदा। खोज के लिए उपयोगकर्ता इनपुट में; लेकिन अगर आप वास्तव में व्हॉट्सएप-ट्रेल्ड जानकारी इनपुट करना चाहते हैं, तो यह एक समस्या होगी (आपके पास 'ए' और 'ए' दोनों के साथ एक इंडेक्स नहीं हो सकता है)।

यह भी देखें

वर्चर जरूरतों में व्हॉट्सएप को पीछे छोड़ना तुलना की जानी चाहिए

आप कल्पना कर सकते हैं उलट उस कॉलम में स्ट्रिंग्स, और उन्हें प्रदर्शित करते समय उन्हें वापस उलट दें। बेशक यह उस कॉलम के आधार पर किसी भी ऑर्डरिंग को खत्म कर देगा, लेकिन अगर आप केवल समानता या सबस्ट्रिंग अस्तित्व का परीक्षण करते हैं, तो यह काम कर सकता है। अग्रणी रिक्त स्थान की गिनती होती है।

समानता खोजों के लिए आप स्ट्रिंग के बेस 64 एन्कोडिंग को भी स्टोर कर सकते हैं, जिसे शब्दावली क्रम बनाए रखना चाहिए (यानी, ए और बी के बीच का क्रम बेस 64 (ए) और बेस 64 (बी) के बीच बनाए रखा जाना चाहिए)। या आप स्ट्रिंग पर एक टर्मिनेटर जोड़ सकते हैं ("\n" अच्छा कर सकता है और खोजों में प्रकट नहीं हो सकता है)।

अंत में, लेकिन यह जोखिम भरा है क्योंकि मनुष्य अंतर नहीं बता सकते हैं, आप रिक्त स्थान को UTF8 char(49824) से बदल सकते हैं:

mysql> select concat ('\'a', char(49824),'\'') AS tricked,
              concat ('\'a', ' '        ,'\'') as honest,
              concat ('\'a', char(49824),'\'') =
              concat ('\'a', ' '        ,'\'') as equals;

+---------+--------+--------+
| tricked | honest | equals |
+---------+--------+--------+
| 'a '    | 'a '   |      0 |
+---------+--------+--------+
1 row in set (0.00 sec)

पंक्तियाँ लगती हैं समान होने के लिए, लेकिन वे नहीं हैं। ध्यान दें कि HTML में स्पेस एक स्पेस है, और 49824   . है (मानक या स्थायी जगह)। यह उन कार्यों को प्रभावित करता है जो HTML में कनवर्ट करते हैं और nbsp वास्तव में UTF8 कोडपॉइंट होने का अर्थ है कि ईमानदार स्ट्रिंग दो बाइट्स है, लेकिन लंबाई छल गई स्ट्रिंग वास्तव में तीन है ।

अंत में आप कॉलम VARBINARY . घोषित कर सकते हैं VARCHAR . के बजाय , इस प्रकार जो हो रहा है उसे पूरी तरह छुपा रहा है। यह सबसे आसान समाधान की तरह दिखता है, लेकिन मुझे डर है कि यह आपको कुछ हफ्तों या महीनों तक परेशान कर सकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एनोटेशन के साथ mysql में mybatis के साथ इन्सर्ट पर आईडी कैसे लौटाएं?

  2. MySQL जॉइन और COUNT सिंगल क्वेरी में

  3. MySQL - दिनांक स्ट्रिंग को दिनांक प्रकार में बदलें?

  4. MySQL में प्रत्येक समूह में पहला रिकॉर्ड कैसे प्राप्त करें

  5. कार्यक्षेत्र का उपयोग करके एक नया MySQL डेटाबेस बनाएँ