SELECT COUNT(*)
FROM tbl
WHERE HEX(col) REGEXP '^(..)*(E[2-9F]|F0A)'
कॉलम col . में चीनी अक्षरों के साथ रिकॉर्ड की संख्या की गणना करेगा ।
समस्याएं:
- मुझे यकीन नहीं है कि हेक्स की कौन सी श्रेणियां चीनी का प्रतिनिधित्व करती हैं।
- परीक्षा हो सकती है कोरियाई और जापानी शामिल हैं। ("सीजेके")
- MySQL में 4-बाइट चीनी अक्षरों की जरूरत है
utf8mb4utf8. के बजाय ।
विस्तार
मुझे लगता है कि तालिका में कॉलम CHARACTER SET utf8 है . Utf8 एन्कोडिंग में, चीनी वर्ण हेक्स E2 और E9, या EF, या F0 के बीच एक बाइट से शुरू होते हैं। हेक्स ई से शुरू होने वाले 3 बाइट लंबे होंगे, लेकिन मैं लंबाई की जांच नहीं कर रहा हूं; F0 वाले 4 बाइट्स होंगे।
रेगेक्सपी ^(..)* . से शुरू होता है , जिसका अर्थ है "स्ट्रिंग की शुरुआत से (^ .) ), 0 या अधिक का पता लगाएं (* ) 2-वर्ण (.. ) मान। उसके बाद या तो E . होना चाहिए -कुछ या F0A . उसके बाद कुछ भी हो सकता है। ई-समथिंग, अधिक विशेष रूप से, E है इसके बाद 2,3,4,5,6,7,8,9, या F. में से कोई भी आता है।
यादृच्छिक रूप से चुना गया, मैंने देखा कि 草 3 हेक्स बाइट्स के रूप में एन्कोड करता है E88D89 , और 𠜎 4 हेक्स बाइट्स के रूप में एन्कोड करता है F0A09C8E ।
मैं किसी विशिष्ट भाषा के लिए स्ट्रिंग की जांच करने के बेहतर तरीके के बारे में नहीं जानता।
जैसा कि आपने पाया, REGEXP बल्कि धीमा हो सकता है।
यह रेगेक्सपी अति-मार सकता है, जिसमें कुछ गैर-चीनी पात्रों को पकड़ा जा सकता है।