sql >> データベース >  >> RDS >> Mysql

AppEnginePythonのCloudSQLでutf8mb4文字セットを使用できません

    私はちょうどグーグルとチャットして、私たちのインスタンスのためにすべてが機能するようになりました!

    Djangoでutf8mb4を機能させる標準的な方法は、settings.pyでDATABASES['default']['OPTIONS']として次のように指定することです。

    'OPTIONS': {'charset': 'utf8mb4'},
    

    これにより、MySQLdb 1.2.4b4 / 1.2.4/1.2.5のAppEngineでOperationalErrorが発生します。これは明らかに、GoogleがコンパイルしているMySQLCクライアントにutf8mb4文字セットがないことを意味します。

    このOPTIONS設定を削除します。

    回避策は、SETNAMESを手動で呼び出すことです。 lib / django / db / backends / mysql / base.pyを編集し、conn.query( "SET NAMES utf8mb4")行をDatabaseWrapper.get_new_connectionに追加すると、次のようになります。

    def get_new_connection(self, conn_params):
        conn = Database.connect(**conn_params)
        conn.encoders[SafeText] = conn.encoders[six.text_type]
        conn.encoders[SafeBytes] = conn.encoders[bytes]
        conn.query("SET NAMES utf8mb4")
        return conn
    

    バックエンドでutf8mb4も有効になっていることを確認してください。 App Engine Djangoチュートリアルの移行コマンドにより、utf8用に構成されたCloudSQLインスタンスが作成されます。 2つのテーブルでutf8mb4を有効にするには、次のコマンドを実行する必要がありました。

    ALTER TABLE polls_question CONVERT TO CHARACTER SET utf8mb4;
    ALTER TABLE polls_choice CONVERT TO CHARACTER SET utf8mb4;
    



    1. PostgreSQLスキーマ管理の基本

    2. MySQLで時系列データのギャップを見つける方法は?

    3. Laravelの移行にインデックスが存在するかどうかを確認するにはどうすればよいですか?

    4. 複数の列を持つ複数の行を挿入する1つのクエリ