मैं एक MySQL डेटाबेस के साथ काम कर रहा हूं जिसमें Excel से कुछ डेटा आयात किया गया है। डेटा में गैर-ASCII वर्ण (एम डैश इत्यादि) के साथ-साथ छिपे हुए कैरिज रिटर्न या लाइन फ़ीड्स शामिल हैं। क्या MySQL का उपयोग करके इन रिकॉर्ड्स को खोजने का कोई तरीका है?मैं MySQL में गैर-ASCII वर्ण कैसे प्राप्त कर सकता हूं?
उत्तर
यह बिल्कुल निर्भर करता है कि तुम क्या "ASCII" के रूप में तय कर रहे हैं, लेकिन मैं इस तरह एक प्रश्न का एक संस्करण की कोशिश कर रहा सुझाव है:
SELECT * FROM tableName WHERE NOT columnToCheck REGEXP '[A-Za-z0-9]';
कि क्वेरी सभी पंक्तियों जहां columnToCheck किसी भी गैर अक्षरांकीय शामिल वापस आ जाएगी वर्ण। यदि आपके पास अन्य पात्र हैं जो स्वीकार्य हैं, तो उन्हें नियमित अभिव्यक्ति में वर्ण वर्ग में जोड़ें।
SELECT * FROM tableName WHERE NOT columnToCheck REGEXP '[A-Za-z0-9.,-]';
MySQL प्रलेखन के अधिक प्रासंगिक पृष्ठों शायद 12.5.2 Regular Expressions है: उदाहरण के लिए, यदि अवधि, अल्पविराम, और हाइफ़न ठीक कर रहे हैं, के लिए क्वेरी बदल जाते हैं।
धन्यवाद - मैं इसे देख लूंगा। मुझे SQL में नियमित अभिव्यक्तियों के साथ अधिक अनुभव नहीं है, इसलिए यह सीखने का एक अच्छा अवसर होगा। –
क्या आप हाइफ़न और अवधि से बच नहीं सकते हैं? (चूंकि उनके पास नियमित अभिव्यक्ति में विशेष अर्थ हैं।) चयन करें * तालिका नाम से जहां कॉलम नहीं है REGEXP '[A-Za-z0-9 \।, \ -]'; – Tooony
"नहीं" "REGEXP" के सामने होना चाहिए। यह केवल मेरे लिए काम करता था जब उस जगह "नहीं" था। –
यह शायद आप के लिए क्या देख रहे हैं:
select * from TABLE where COLUMN regexp '[^ -~]';
यह सभी पंक्तियों जहां स्तंभ में रखे लौटना चाहिए गैर- ASCII वर्ण (या ऐसे न्यू लाइन के रूप में प्रिंट न हो सकने ASCII वर्ण)।
मेरे लिए बहुत अच्छा काम करता है। "regexp" [^ - ~] '' का अर्थ है एक चरित्र जो अंतरिक्ष से पहले है "या" ~ "या ASCII 32 - 126 के बाद। सभी अक्षरों, संख्याओं और प्रतीकों, लेकिन कोई अप्राप्य चीजें नहीं। – Josh
आप इसे टी-शर्ट के रूप में भी प्राप्त कर सकते हैं;) http://www.catonmat.net/blog/my-favorite-regex/ – SamGoody
** दस्तावेज़ीकरण में ** चेतावनी ** नोट करें (https://dev.mysql.com/doc/en/regexp.html): "* 'REGEXP' और' RLIKE 'ऑपरेटर बाइट-वार फैशन में काम करते हैं, इसलिए वे बहु-बाइट सुरक्षित नहीं हैं और अप्रत्याशित परिणाम बहु- बाइट चरित्र सेट।इसके अलावा, ये ऑपरेटर अपने बाइट मानों से वर्णों की तुलना करते हैं और उच्चारण वर्णों की तुलना बराबर की तुलना नहीं की जा सकती है, भले ही दिए गए कोलेक्शन उन्हें समान मानते हैं। * " – eggyal
आप 0 दशमलव मान है कि सभी पात्रों के रूप में ASCII परिभाषित कर सकते हैं - 127 (0x00 - 0x7F) और निम्न क्वेरी
SELECT * FROM TABLE WHERE NOT HEX(COLUMN) REGEXP '^([0-7][0-9A-F])*$';
का उपयोग कर गैर- ASCII वर्ण के साथ कॉलम मिलेंगे यह सबसे व्यापक क्वेरी था मैं साथ आ सकता था।
अब तक का सबसे अच्छा जवाब है, लेकिन यह इस तरह से भी आसान है: 'चुनें * तालिका से जहां लेंस (कॉलम)! = CHAR_LENGTH (कॉलम) ' – SuN
-1 ** यह गलत परिणाम उत्पन्न कर सकता है। ** मान लीजिए, उदाहरण के लिए, एक यू है टीएफ -16 कॉलम जिसमें '' '' (बाइट अनुक्रम '0x0101' द्वारा एन्कोड किया गया है) - इसे इस परीक्षण का उपयोग करके "ASCII" समझा जाएगा: * एक झूठी नकारात्मक *; वास्तव में, कुछ चरित्र सेट ASCII वर्णों को '0x00' से '0x7f' के भीतर एन्कोड नहीं करते हैं, जहां इस समाधान से झूठी सकारात्मक उत्पन्न होगी। ** इस उत्तर पर निर्भर न करें! ** – eggyal
@sun: यह बिल्कुल मदद नहीं करता है - कई वर्ण सेट निश्चित-लंबाई हैं और इसलिए 'LENGTH (कॉलम) '' CHAR_LENGTH (कॉलम)' का निरंतर एकाधिक होगा मूल्य के बावजूद। – eggyal
MySQL व्यापक चरित्र सेट प्रबंधन प्रदान करता है जो इस तरह की समस्या से मदद कर सकता है।
SELECT whatever
FROM tableName
WHERE columnToCheck <> CONVERT(columnToCheck USING ASCII)
CONVERT(col USING charset)
कार्य करेंगे प्रतिस्थापन अक्षरों में unconvertable वर्ण बदल जाता है। फिर, रूपांतरित और अपरिवर्तित पाठ असमान होगा।
अधिक चर्चा के लिए इसे देखें। http://dev.mysql.com/doc/refman/5.7/en/charset-repertoire.html
आप ASCII के स्थान पर इच्छित किसी भी चरित्र सेट नाम का उपयोग कर सकते हैं। उदाहरण के लिए, यदि आप यह जानना चाहते हैं कि कौन से वर्ण कोड पृष्ठ 1257 (लिथुआनियाई, लातवियाई, एस्टोनियन) में सही ढंग से प्रस्तुत नहीं करेंगे, CONVERT(columnToCheck USING cp1257)
यह इस समस्या का एक उत्कृष्ट समाधान है और बहुत अधिक मजबूत है। – CraigDouglas
यह आरईजीईएक्सपी (जो उच्चारण खोजने के लिए मेरे लिए काम नहीं करता है) से अधिक बेहतर एन्कोडिंग – Glasnhost
एन्कोडिंग से संबंधित वर्णों को खोजने के लिए उपयोगी नहीं है (और यह सब कुछ बनाने के लिए एक सरल तंत्र भी प्रदान करता है) ascii फिर से ... –
उपरोक्त सभी उदाहरणों से एक गायब चरित्र समाप्ति चरित्र (\ 0) है। यह MySQL कंसोल आउटपुट के लिए अदृश्य है और पहले उल्लिखित किसी भी प्रश्न से खोजने योग्य नहीं है। क्वेरी यह पता लगाने के लिए बस है:
SELECT * FROM `table` WHERE NOT `field` REGEXP "[\\x00-\\xFF]|^$";
यह करता है:
select * from TABLE where COLUMN like '%\0%';
सही जवाब के आधार पर, लेकिन साथ ही खाते ASCII नियंत्रण वर्ण को ध्यान में रखकर, समाधान है कि मेरे लिए काम किया है एक ही बात: कॉलम में ASCII रेंज के उल्लंघन की खोज करता है, लेकिन आपको नियंत्रण वर्णों की भी खोज करने देता है, क्योंकि यह कोड बिंदुओं के लिए हेक्साडेसिमल नोटेशन का उपयोग करता है। चूंकि कोई तुलना या रूपांतरण नहीं है (@ ओली के उत्तर के विपरीत), यह भी काफी तेज होना चाहिए। (विशेष रूप से यदि MySQL रेगेक्स क्वेरी पर प्रारंभिक समाप्ति करता है, जो इसे निश्चित रूप से करना चाहिए।)
यह शून्य-लंबाई वाले फ़ील्ड लौटने से भी बचाता है। आप एक से थोड़ा-लंबे समय तक संस्करण है कि बेहतर प्रदर्शन कर सकते हैं चाहते हैं, तो आप इस के बजाय का उपयोग कर सकते हैं:
SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP "[\\x00-\\xFF]";
यह लंबाई से बचने के लिए शून्य लंबाई परिणाम के लिए एक अलग जांच करता है उन्हें एक regex पारित करने के लिए विचार किए बिना। आपके पास शून्य-लंबाई प्रविष्टियों की संख्या के आधार पर, यह काफी तेज़ हो सकता है।
ध्यान दें कि यदि आपका डिफ़ॉल्ट वर्ण सेट कुछ विचित्र है जहां 0x00-0xFF ASCII के समान मानों पर नक्शा नहीं लगाता है (क्या ऐसा कोई चरित्र मौजूद है?), यह झूठी सकारात्मक लौटाएगा। अन्यथा, आनंद लें!
00-एफएफ में सभी संभव 8-बिट मान शामिल हैं, जो 'REGEXP' जांच रहा है। इसलिए यह हमेशा मिलान करने की गारंटी है। इसके अलावा '^ $' शायद वह नहीं है जो आप चाहते थे। –
विशेष वर्ण रिकॉर्ड
SELECT *
FROM tableName
WHERE fieldName REGEXP '[^[email protected]:. \'\-`,\&]'
@ zende का जवाब केवल एक ही है कि ascii और गैर ASCII वर्ण के मिश्रण के साथ कॉलम कवर था खोज के लिए इस क्वेरी का उपयोग करते हुए प्रयास करें, लेकिन यह भी है कि समस्याग्रस्त हेक्स बात की थी। मैंने इसका इस्तेमाल किया:
SELECT * FROM `table` WHERE NOT `column` REGEXP '^[ -~]+$' AND `column` !=''
- 1. मैं MySQL में initcap कार्यक्षमता कैसे प्राप्त कर सकता हूं?
- 2. मैं प्रतिनिधि कैसे प्राप्त कर सकता हूं?
- 3. मैं विशेष वर्ण कैसे हटा सकता हूं?
- 4. मैं कोउट आउटपुट कैसे इंडेंट कर सकता हूं? वर्ण - ''
- 5. मैं MySQL में एक संगत समूह कैसे कर सकता हूं?
- 6. मैं mysql में बुलियन मान कैसे अपडेट कर सकता हूं?
- 7. मैं सी ++ में mysql का उपयोग कैसे कर सकता हूं?
- 8. मैं यूनिकोड चरित्र कोड कैसे प्राप्त कर सकता हूं?
- 9. मैं EditText परिवर्तन कैसे प्राप्त कर सकता हूं?
- 10. मैं .NET में स्थानीय आईपी कैसे प्राप्त कर सकता हूं?
- 11. मैं डब्ल्यूपीएफ में डीपीआई कैसे प्राप्त कर सकता हूं?
- 12. मैं जावास्क्रिप्ट में टाइमज़ोन नाम कैसे प्राप्त कर सकता हूं?
- 13. मैं NSDictionary में पहला तत्व कैसे प्राप्त कर सकता हूं?
- 14. मैं AppEngine में बेस यूआरआई कैसे प्राप्त कर सकता हूं?
- 15. मैं जावा में सीपीयूड कैसे प्राप्त कर सकता हूं?
- 16. मैं .NET में cpu जानकारी कैसे प्राप्त कर सकता हूं?
- 17. मैं पर्ल में ट्रेसबैक कैसे प्राप्त कर सकता हूं?
- 18. मैं django मॉडल में विधि कैसे प्राप्त कर सकता हूं?
- 19. मैं symfony2 में एक JSON कैसे प्राप्त कर सकता हूं
- 20. मैं पिरामिड में आईएनआई डेटा कैसे प्राप्त कर सकता हूं?
- 21. मैं पाइथन में टर्मिनल आउटपुट कैसे प्राप्त कर सकता हूं?
- 22. मैं% ENV में परिवर्तन कैसे प्राप्त कर सकता हूं?
- 23. मैं jQuery में स्थानीय समय कैसे प्राप्त कर सकता हूं?
- 24. मैं सी # में वेक्टर प्रकार कैसे प्राप्त कर सकता हूं?
- 25. मैं सॉफ्टकीबोर्ड में "पूर्ण" बटन कैसे प्राप्त कर सकता हूं?
- 26. मैं रेडिस में सभी सेट कैसे प्राप्त कर सकता हूं?
- 27. मैं सी # में वर्तमान समय कैसे प्राप्त कर सकता हूं?
- 28. मैं एक जीएडीटी में साझाकरण कैसे प्राप्त कर सकता हूं?
- 29. मैं मूल क्रम में फ़ील्ड कैसे प्राप्त कर सकता हूं?
- 30. मैं PHP स्ट्रिंग के अंतिम 7 वर्ण कैसे प्राप्त कर सकता हूं?
ओली जोन्स का एक बेहतर उत्तर है (नीचे की जांच करें)। –
@ जोनाथनअर्केल अब नीचे नहीं है :) – Brilliand
सुधार .. बीच की जांच करें! ;) –