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

DjangoにUnicode文字列を保存するときにMySQLの誤った文字列値エラー

    これらの答えはどれも私にとって問題を解決しませんでした。根本的な原因は次のとおりです:

    utf-8文字セットを使用してMySQLに4バイト文字を格納することはできません。

    MySQLには、utf-8文字に3バイトの制限があります。 (はい、それは奇抜です、ここでDjango開発者によってうまくまとめられています

    これを解決するには、次のことを行う必要があります。

    1. MySQLデータベース、テーブル、および列を変更して、utf8mb4文字セット (MySQL 5.5以降でのみ利用可能)
    2. Django設定ファイルで次のように文字セットを指定します。

    settings.py

    DATABASES = {
        'default': {
            'ENGINE':'django.db.backends.mysql',
            ...
            'OPTIONS': {'charset': 'utf8mb4'},
        }
    }
    

    注:データベースを再作成するときに、「指定されたキーが長すぎました 」に遭遇する可能性があります ' 問題。

    最も可能性の高い原因はCharFieldです max_lengthが255で、何らかのインデックスがあります(例:unique)。 utf8mb4はutf-8より33%多いスペースを使用するため、これらのフィールドを33%小さくする必要があります。

    この場合、max_lengthを255から191に変更します。

    または、 MySQL構成を編集して、この制限を削除することもできます ただし、djangoハッカーなしではありません

    更新: この問題が再び発生し、PostgreSQLに切り替える ことになりました。 VARCHARを減らすことができなかったため 191文字まで。



    1. 子テーブル挿入のトリガーを作成すると、紛らわしいエラーが返されます

    2. PostgreSQLでUPSERT(MERGE、INSERT ... ON DUPLICATE UPDATE)する方法は?

    3. RSUメソッドを使用したMySQLGaleraクラスターのオンラインスキーマアップグレード

    4. MySQL ABS()関数–数値の絶対値を返します