sql >> Database teknologi >  >> RDS >> Mysql

Kan ikke initialisere tegnsæt utf8mb4 med Windows mysql-python

Overvej følgende tjekliste:

  1. Har du tjekket din MySQL-konfigurationsfil (/etc/my. cnf) ? Det skal være:

    [client]
    default-character-set = utf8mb4
    
    [mysql]
    default-character-set = utf8mb4
    
    [mysqld]
    character-set-client-handshake = FALSE
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    

    Og du kan bekræfte dem via:

    mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
    +--------------------------+--------------------+
    | Variable_name            | Value              |
    +--------------------------+--------------------+
    | character_set_client     | utf8mb4            |
    | character_set_connection | utf8mb4            |
    | character_set_database   | utf8mb4            |
    | character_set_filesystem | binary             |
    | character_set_results    | utf8mb4            |
    | character_set_server     | utf8mb4            |
    | character_set_system     | utf8               |
    | collation_connection     | utf8mb4_unicode_ci |
    | collation_database       | utf8mb4_unicode_ci |
    | collation_server         | utf8mb4_unicode_ci |
    +--------------------------+--------------------+
    10 rows in set (0.00 sec)
    

    -tak til Mathias' blogindlæg

  2. Gennemtving håndhæv UTF-8, der skal bruges mellem Python og MySQL:

    # Connect to mysql.
    dbc = MySQLdb.connect(host='###', user='###', passwd='###', db='###', use_unicode=True)
    
    # Create a cursor.
    cursor = dbc.cursor()
    
    # Enforce UTF-8 for the connection.
    cursor.execute('SET NAMES utf8mb4')
    cursor.execute("SET CHARACTER SET utf8mb4")
    cursor.execute("SET character_set_connection=utf8mb4")
    
    # Do database stuff.
    
    # Commit data.
    dbc.commit()
    
    # Close cursor and connection.
    cursor.close()
    dbc.close()
    
  3. Officielt tip fra MySQL vedrørende Can't initialize character set :

    Denne fejl kan have en af ​​følgende årsager:

    • Tegnsættet er et multibyte tegnsæt, og du har ingen understøttelse af tegnsættet i klienten. I dette tilfælde skal du omkompilere klienten ved at køre CMake med -DDEFAULT_CHARSET=charset_name eller -DWITH_EXTRA_CHARSETS=charset_name mulighed. Se afsnit 2.9.4, “MySQL Source-Configuration Valgmuligheder” .

    • Alle standard MySQL binære filer er kompileret med -DWITH_EXTRA_CHARSETS=complex , som muliggør understøttelse af alle multibyte-tegnsæt. Se afsnit 2.9.4, “MySQL Source-Configuration Valgmuligheder” .

    • Tegnsættet er et simpelt tegnsæt, der ikke er kompileret i mysqld, og tegnsættets definitionsfiler er ikke på det sted, hvor klienten forventer at finde dem.

      I dette tilfælde skal du bruge en af ​​følgende metoder til at løse problemet:

      • Genkompiler klienten med understøttelse af tegnsættet. Se afsnit 2.9.4, “MySQL Source-Configuration Valgmuligheder” .

      • Angiv til klienten den mappe, hvor tegnsætdefinitionsfilerne er placeret. For mange klienter kan du gøre dette med --character-sets-dir mulighed.

      • Kopier tegndefinitionsfilerne til stien, hvor klienten forventer, at de er.



  1. Undgå faldbord, hvis betingelserne ikke er opfyldt

  2. Hvordan kopieres fra CSV-fil til PostgreSQL-tabel med overskrifter i CSV-fil?

  3. Vis flere poster i træk

  4. Kopier flere poster med en master-detaljer relation