2015-07-08 41 views
6

MySQL's UTF8 character set'un yalnızca 3 bayt olduğunu (zor yoldan) keşfettim. Biraz araştırma gösteriyor ki bunu tabloları değiştirerek utf8mb4 harmanlamadan kullanabiliyor ve 4 baytlık UTF almam gerekiyor.SQLAlchemy ve pymysql kullanarak, utf8mb4 kullanmak için bağlantıyı nasıl ayarlayabilirim?

Bunu yaptım. Bu karakter kümesini kullanabilmek için veritabanım, tablolarım ve sütunlarım ALTER ed. collation_server yaparak kuruldu

> show variables like '%collation%'; 

collation_connection utf8_general_ci 
collation_database utf8mb4_general_ci 
collation_server  utf8mb4_general_ci 

: Ben aşağıdaki ayarlara sahip keşfetti

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

: Ben U + FFFF daha Unicode kod noktası daha büyük sahip veri aldıysak, hala bu iletisini my.cnf olarak değişir. Sorum şu, bağlantıyı nasıl değiştireceğim? SQL Simyası'yla aracılığıyla bağlanırken

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) 

Ben utf8mb4_general_ci için utf8_general_ci ne değiştirmek için ne yapabilirim: Şu anda böyle bir SQL Alchemy ve pymysql kullanarak veritabanına bağlanmak?

cevap

12

Değişim connect_string kullanmak charset=utf8mb4:

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