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

खराब वर्णों को कैसे हटाएं जो MySQL में utf8 एन्कोडिंग के लिए उपयुक्त नहीं हैं?

जब मुझे इस तरह की समस्या थी, तो मैंने यह सुनिश्चित करने के लिए पर्ल स्क्रिप्ट का उपयोग किया कि डेटा इस तरह के कोड का उपयोग करके वैध यूटीएफ -8 में परिवर्तित हो गया है:

use Encode;
binmode(STDOUT, ":utf8");
while (<>) {
    print Encode::decode('UTF-8', $_);
}

यह स्क्रिप्ट (संभवतः दूषित) UTF-8 को stdin . पर लेती है और मान्य UTF-8 को stdout . पर फिर से प्रिंट करता है . अमान्य वर्णों को . से बदल दिया गया है (U+FFFD , यूनिकोड रिप्लेसमेंट कैरेक्टर )।

यदि आप इस स्क्रिप्ट को अच्छे UTF-8 इनपुट पर चलाते हैं, तो आउटपुट इनपुट के समान होना चाहिए।

यदि आपके पास डेटाबेस में डेटा है, तो यह सुनिश्चित करने के लिए कि सब कुछ मान्य UTF-8 है, अपनी तालिका (तालिकाओं) को स्कैन करने और इस दृष्टिकोण का उपयोग करके सभी डेटा को साफ़ करने के लिए DBI का उपयोग करना समझ में आता है।

यह इसी स्क्रिप्ट का पर्ल वन-लाइनर संस्करण है:

perl -MEncode -e "binmode STDOUT,':utf8';while(<>){print Encode::decode 'UTF-8',\$_}" < bad.txt > good.txt

संपादित करें:केवल जावा समाधान जोड़ा गया

यह एक उदाहरण है कि इसे जावा में कैसे करें:

import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CodingErrorAction;

public class UtfFix {
    public static void main(String[] args) throws InterruptedException, CharacterCodingException {
        CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder();
        decoder.onMalformedInput(CodingErrorAction.REPLACE);
        decoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
        ByteBuffer bb = ByteBuffer.wrap(new byte[] {
            (byte) 0xD0, (byte) 0x9F, // 'П'
            (byte) 0xD1, (byte) 0x80, // 'р'
            (byte) 0xD0,              // corrupted UTF-8, was 'и'
            (byte) 0xD0, (byte) 0xB2, // 'в'
            (byte) 0xD0, (byte) 0xB5, // 'е'
            (byte) 0xD1, (byte) 0x82  // 'т'
        });
        CharBuffer parsed = decoder.decode(bb);
        System.out.println(parsed);
        // this prints: Пр?вет
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैसे हल करें प्रमाणीकरण प्लगइन लोड करने में असमर्थ 'caching_sha2_password' समस्या

  2. FETCHALL के बिना MYSQL PDO में 2 बार कैसे प्राप्त करें?

  3. स्थानीय कंप्यूटर पर MySQL57 सेवा शुरू हुई और फिर बंद हो गई

  4. PHP/MySQL - SQL सिंटैक्स त्रुटि?

  5. उच्च उपलब्धता के लिए कैमिलो MySQL डेटाबेस को कैसे परिनियोजित करें