2015-07-08 10 views
6

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?

Odpowiedz

12

Zmiana używać connect_stringcharset=utf8mb4:

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