web-dev-qa-db-ja.com

SQLAlchemyとpymysqlを使用して、utf8mb4を利用するように接続を設定するにはどうすればよいですか?

MySQLのUTF8文字セット がわずか3バイトであることを(難しい方法で)見つけました。少し調べてみると、テーブルを変更して utf8mb4 照合を使用し、UTFが4バイトになるようにして、これを修正できることを示しています。

私はそうしました。私のデータベース、テーブル、列はすべて、この文字セットを利用するためにALTERedされています。ただし、U + FFFFより大きいUnicodeコードポイントを持つデータがある場合でも、このメッセージが表示されます。

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

次の設定があることを発見しました。

> show variables like '%collation%';

collation_connection  utf8_general_ci
collation_database    utf8mb4_general_ci
collation_server      utf8mb4_general_ci

collation_serverは、my.cnfに変更を加えることによって設定されました。私の質問ですが、接続をどのように変更しますか?私は現在、次のようにSQL Alchemyとpymysqlを使用してデータベースに接続しています。

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)

SQL Alchemy経由で接続するときに、utf8_general_ciからutf8mb4_general_ciに変更するにはどうすればよいですか?

15
Andy

変更 connect_stringを使用するにはcharset=utf8mb4

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