Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Nie można zainicjować zestawu znaków utf8mb4 za pomocą mysql-python w systemie Windows

Rozważ poniższą listę kontrolną:

  1. Czy sprawdziłeś swój plik konfiguracyjny MySQL (/etc/my. cnf) ? Powinno być:

    [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
    

    Możesz je zweryfikować:

    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)
    

    -dzięki poście Mathiasa na blogu

  2. Wymuszaj stosowanie UTF-8 między Pythonem a 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. Oficjalna wskazówka od MySQL dotyczące Can't initialize character set :

    Ten błąd może mieć jedną z następujących przyczyn:

    • Zestaw znaków jest zestawem znaków wielobajtowych i nie masz obsługi zestawu znaków w kliencie. W takim przypadku musisz ponownie skompilować klienta, uruchamiając CMake z -DDEFAULT_CHARSET=charset_name lub -DWITH_EXTRA_CHARSETS=charset_name opcja. Zobacz sekcję 2.9.4, „Konfiguracja źródła MySQL Opcje” .

    • Wszystkie standardowe pliki binarne MySQL są kompilowane z opcją -DWITH_EXTRA_CHARSETS=complex , który umożliwia obsługę wszystkich zestawów znaków wielobajtowych. Zobacz sekcję 2.9.4, „Konfiguracja źródła MySQL Opcje” .

    • Zestaw znaków to prosty zestaw znaków, który nie jest kompilowany do mysqld, a pliki definicji zestawu znaków nie znajdują się w miejscu, w którym klient spodziewa się je znaleźć.

      W takim przypadku musisz użyć jednej z następujących metod, aby rozwiązać problem:

      • Ponownie skompiluj klienta z obsługą zestawu znaków. Zobacz sekcję 2.9.4, „Konfiguracja źródła MySQL Opcje” .

      • Podaj klientowi katalog, w którym znajdują się pliki definicji zestawu znaków. W przypadku wielu klientów możesz to zrobić za pomocą --character-sets-dir opcja.

      • Skopiuj pliki definicji znaków do ścieżki, w której oczekuje ich klient.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql, gdzie id jest w tablicy

  2. Uzyskaj kierunek indeksu ze schematu informacyjnego w MySQL

  3. Sprawdź nakładanie się zakresów dat w MySQL

  4. MySQL:czy możliwe jest group_concat wiele wierszy?

  5. Najlepsze praktyki dotyczące replikacji MySQL