Wie kann ich mithilfe von SQLAlchemy und pymysql die Verbindung so einstellen, dass utf8mb4 verwendet wird?
Ich entdeckte (auf die harte Tour), dass MySQLs UTF8-Zeichensatz ist nur 3 Bytes. Nachforschungen haben ergeben, dass ich dieses Problem beheben kann, indem ich die Tabellen ändere, um das @ zu verwendeutf8mb4
Kollatierung und erhalten die vollen 4 Bytes UTF sein sollte.
Ich habe es getan. Meine Datenbank, Tabellen und Spalten waren alleALTER
ed, um diesen Zeichensatz zu verwenden. Ich erhalte diese Meldung jedoch weiterhin, wenn ich Daten habe, deren Unicode-Codepunkte größer als U + FFFF sind:
Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='"
Ich habe festgestellt, dass ich die folgenden Einstellungen habe:
> show variables like '%collation%';
collation_connection utf8_general_ci
collation_database utf8mb4_general_ci
collation_server utf8mb4_general_ci
Dascollation_server
wurde festgelegt, indem Änderungen an @ vorgenommen wurdmy.cnf
. Meine Frage ist, wie ändere ich die Verbindung? Ich verbinde mich derzeit mit SQL Alchemy und pymysql wie folgt mit der Datenbank:
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 tun, um von @ zu wechselutf8_general_ci
zuutf8mb4_general_ci
bei der Verbindung über SQL Alchemy?