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?