2015-07-08 9 views
6

Ich entdeckte (auf die harte Tour), dass MySQL's UTF8 character set nur 3 Bytes ist. Ein bisschen Forschung zeigt, dass ich das beheben kann, indem ich die Tabellen ändere, um die utf8mb4 Kollatierung zu verwenden und die vollen 4 Bytes zu erhalten, die UTF sein sollte.Wie kann ich mithilfe von SQLAlchemy und pymysql die Verbindung zur Verwendung von utf8mb4 einrichten?

Ich habe es getan. Meine Datenbank, Tabellen und Spalten wurden alle ALTER ed, um diesen Zeichensatz zu verwenden. Allerdings habe ich immer noch diese Meldung erhalten, wenn ich Daten haben, die Unicode-Codepunkte größer als U + FFFF hat:

Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='" 

Ich entdeckte ich die folgenden Einstellungen haben:

> show variables like '%collation%'; 

collation_connection utf8_general_ci 
collation_database utf8mb4_general_ci 
collation_server  utf8mb4_general_ci 

Die collation_server gesetzt wurde, indem Änderungen an my.cnf. Meine Frage, wie ändere ich die Verbindung? Ich verbinde derzeit in der Datenbank mit SQL Alchemy und pymysql wie folgt aus:

connect_string = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT, DATABASE) 
engine = create_engine(connect_string, convert_unicode=True, echo=False) 
session = sessionmaker() 
session.configure(bind=engine) 

Was kann ich von utf8_general_ci zu utf8mb4_general_ci tun ändern, wenn über SQL Alchemy verbinden?

Antwort

12

Ändern Sie den connect_string verwenden charset=utf8mb4:

connect_string = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT, DATABASE) 
Verwandte Themen