MySQLのUTF8文字セット がわずか3バイトであることを(難しい方法で)見つけました。少し調べてみると、テーブルを変更して utf8mb4
照合を使用し、UTFが4バイトになるようにして、これを修正できることを示しています。
私はそうしました。私のデータベース、テーブル、列はすべて、この文字セットを利用するためにALTER
edされています。ただし、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
に変更するにはどうすればよいですか?
変更 connect_string
を使用するにはcharset=utf8mb4
:
connect_string = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(DB_USER, DB_PASS, DB_Host, DB_PORT, DATABASE)