sql >> Databasteknik >  >> RDS >> Mysql

Kan inte initiera teckenuppsättning utf8mb4 med Windows mysql-python

Tänk på följande checklista:

  1. Kollade du din MySQL-konfigurationsfil (/etc/my. cnf) ? Det ska vara:

    [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
    

    Och du kan verifiera 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)
    

    -tack vare Mathias blogginlägg

  2. Tvinga upp UTF-8 som ska användas mellan Python och 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. Officiellt tips från MySQL angående Can't initialize character set :

    Det här felet kan ha någon av följande orsaker:

    • Teckenuppsättningen är en multibyte-teckenuppsättning och du har inget stöd för teckenuppsättningen i klienten. I det här fallet måste du kompilera om klienten genom att köra CMake med -DDEFAULT_CHARSET=charset_name eller -DWITH_EXTRA_CHARSETS=charset_name alternativ. Se avsnitt 2.9.4, “MySQL Source-Configuration Alternativ” .

    • Alla standard MySQL-binärer kompileras med -DWITH_EXTRA_CHARSETS=complex , vilket möjliggör stöd för alla multibyte-teckenuppsättningar. Se avsnitt 2.9.4, “MySQL Source-Configuration Alternativ” .

    • Teckenuppsättningen är en enkel teckenuppsättning som inte är kompilerad i mysqld, och teckenuppsättningens definitionsfiler finns inte på den plats där klienten förväntar sig att hitta dem.

      I det här fallet måste du använda någon av följande metoder för att lösa problemet:

      • Kompilera om klienten med stöd för teckenuppsättningen. Se avsnitt 2.9.4, “MySQL Source-Configuration Alternativ” .

      • Ange för klienten katalogen där teckenuppsättningsdefinitionsfilerna finns. För många klienter kan du göra detta med --character-sets-dir alternativ.

      • Kopiera teckendefinitionsfilerna till den sökväg där klienten förväntar sig att de ska vara.



  1. Ändra SQL-databas misstänkt läge till normalt läge med fråga

  2. Hur kan man hämta enorma poster med Laravel och MySQL?

  3. Laravel SQLSTATE[22007]:Ogiltigt datetime-format:1292 Felaktigt datetime-värde:'2019-03-10 02:00:39' för kolumnen 'updated_at' (sommartid?)

  4. Infoga data i MySQL-databasen från Android-appen. Ändringar återspeglas inte i databasen