ホームページ >データベース >mysql チュートリアル >Django と MySQL で Unicode を保存するときに発生する「文字列値が正しくありません」エラーを修正する方法

Django と MySQL で Unicode を保存するときに発生する「文字列値が正しくありません」エラーを修正する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-11-24 00:51:10512ブラウズ

How to Fix

Django を使用して MySQL に Unicode 文字を保存するときの不正な文字列値エラー

Django の auth_user モデルに Unicode 文字列を保存しようとすると、次のエラーが発生する可能性がありますメッセージ:

Incorrect string value: '\xC4\x8Dius' for column 'last_name' at row 104

潜在的な原因

このエラーは通常、次のことが原因で発生します:

  • 文字セットの制限: MySQL には UTF-8 の 3 バイト制限があります文字。
  • データベースとテーブルの設定: データベース、テーブル、および列は、4 バイトの Unicode 文字をサポートするために utf8mb4 文字セットを使用する必要があります。

解決策

この問題を解決するには、次の手順に従ってください手順:

  1. utf8mb4 文字セットを使用するようにデータベース、テーブル、列を変更します:

    • 次のクエリを実行して作成しますutf8mb4 文字を含む新しいデータベースset:
    CREATE DATABASE db_name CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
    • ALTER TABLE ステートメントを使用して既存のテーブルと列を変更します:
    ALTER TABLE auth_user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  2. Djangoで文字セットを指定するsettings:

    Django 設定ファイル (settings.py) に次の行を追加します:

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

追加の考慮事項

  • 最大長が次の既存の CharField 列がある場合255 とそれらにインデックスがある場合、「指定されたキーが長すぎます」エラーを回避するには、最大長を 191 に減らす必要があります。
  • あるいは、MySQL 設定を編集して文字長制限を削除することもできます。ただし、これには Django への追加の変更が必要です。
  • 可能であれば、これらの制限なしで UTF-8 で最大 4 バイトの Unicode 文字をサポートする PostgreSQL への切り替えを検討してください。

以上がDjango と MySQL で Unicode を保存するときに発生する「文字列値が正しくありません」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。