sql >> Database >  >> RDS >> Mysql

Kan tekenset utf8mb4 niet initialiseren met Windows mysql-python

Overweeg de volgende checklist:

  1. Heb je je MySQL-configuratiebestand (/etc/my. cnf) ? Het zou moeten zijn:

    [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
    

    En je kunt ze verifiëren 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)
    

    -dankzij Mathias' blogbericht

  2. Dwing UTF-8 af voor gebruik tussen Python en 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. Officiële tip van MySQL betreffende Can't initialize character set :

    Deze fout kan een van de volgende oorzaken hebben:

    • De tekenset is een multibyte tekenset en je hebt geen ondersteuning voor de tekenset in de client. In dit geval moet u de client opnieuw compileren door CMake uit te voeren met de -DDEFAULT_CHARSET=charset_name of -DWITH_EXTRA_CHARSETS=charset_name keuze. Zie Sectie 2.9.4, "MySQL-bronconfiguratie Opties” .

    • Alle standaard MySQL-binaire bestanden zijn gecompileerd met -DWITH_EXTRA_CHARSETS=complex , waarmee ondersteuning voor alle multibyte-tekensets mogelijk is. Zie Sectie 2.9.4, "MySQL-bronconfiguratie Opties” .

    • De tekenset is een eenvoudige tekenset die niet is gecompileerd in mysqld, en de tekensetdefinitiebestanden bevinden zich niet op de plaats waar de klant ze verwacht te vinden.

      In dit geval moet u een van de volgende methoden gebruiken om het probleem op te lossen:

      • Compileer de client opnieuw met ondersteuning voor de tekenset. Zie Sectie 2.9.4, "MySQL-bronconfiguratie Opties” .

      • Geef aan de client de map op waar de tekensetdefinitiebestanden zich bevinden. Voor veel klanten kun je dit doen met de --character-sets-dir optie.

      • Kopieer de karakterdefinitiebestanden naar het pad waar de klant ze verwacht.



  1. Hoe de naam van het databaseschema te krijgen bij gebruik van de Oracle jdbc-verbinding?

  2. Kan postgresql-service niet starten op CentOS 7

  3. PostgreSQL 9.3:twee kolommen in één samenvoegen

  4. Als u een opgeslagen functie of procedure aanroept, worden wijzigingen niet ingevoegd en behouden