Odkryłem (na własnej skórze), że MySQL's UTF8 character set to tylko 3 bajty. Trochę badań pokazuje, że mogę to naprawić, zmieniając tabele, aby wykorzystać sortowanie utf8mb4
i uzyskać pełne 4 bajty UTF powinno być.Korzystając z SQLAlchemy i pymysql, w jaki sposób mogę ustawić połączenie tak, aby korzystało z utf8mb4?
Zrobiłem tak. Moja baza danych, tabele i kolumny zostały wszystkie ALTER
ed, aby korzystać z tego zestawu znaków. Ja jednak nadal ten komunikat jeśli mam dane, które punkty kodowe Unicode większy niż U + FFFF:
Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='"
odkryłem Mam następujące ustawienia:
> show variables like '%collation%';
collation_connection utf8_general_ci
collation_database utf8mb4_general_ci
collation_server utf8mb4_general_ci
collation_server
zostało określone poprzez zmienia się na my.cnf
. Moje pytanie brzmi: jak mogę zmienić połączenie? I obecnie połączyć się z bazą danych za pomocą SQL Alchemy i pymysql tak:
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)
Co mogę zrobić, aby zmienić z utf8_general_ci
do utf8mb4_general_ci
podczas łączenia poprzez SQL Alchemy?