首頁 >資料庫 >mysql教程 >如何修復在 Django 中儲存 Unicode 字串時出現的「字串值不正確」錯誤?

如何修復在 Django 中儲存 Unicode 字串時出現的「字串值不正確」錯誤?

Patricia Arquette
Patricia Arquette原創
2024-12-02 00:38:13122瀏覽

How to Fix the

在Django 中儲存Unicode 字串時出現錯誤字串值錯誤

當嘗試將unicode 字串儲存到Django 的auth_user 模型時,您可能會遇到“錯誤的字串值”錯誤。此錯誤通常是由 MySQL 字元集和排序規則設定引起的。

MySQL 字元集和排序規則

MySQL 支援 UTF-8 字元集,但它有一個字元數限制為 3 位元組。這意味著在 MySQL 中無法使用標準 UTF-8 字元集儲存 4 位元組的 unicode 字元。

問題說明

當 Django 嘗試儲存時unicode 字串到 auth_user 模型,MySQL 嘗試將它們轉換為 UTF-8 字元集。但是,如果字串包含 4 個位元組字符,則轉換會失敗並導致“字串值不正確”錯誤。

解決方案

要解決此問題,您可以:

  1. 將My將MySQL 字元集更改為utf8mb4: MySQL 5.5 以上版本支援utf8mb4 字元集,允許使用 4位元組字元。使用 utf8mb4 重新建立資料庫、表格和欄位。
  2. 在 Django 設定中指定字元集: 將下列內容新增至 Django 設定檔 (settings.py) 以指定 Django設定的字元集資料庫連線:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        ...
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}

附加註意事項

  • 如果您無法將VARCHAR 欄位的大小減少到191 個字元,您可以考慮切換到PostgreSQL,它預設支援4 位元組unicode 字元。
  • 如果您希望繼續使用帶有utf8mb4 的MySQL,您可能需要對Django 進行修改以增加允許的VARCHAR
  • 在極少數情況下,此問題也可能是由限制金鑰大小的資料庫配置引起的。檢查您的 MySQL 配置並根據需要進行調整。

以上是如何修復在 Django 中儲存 Unicode 字串時出現的「字串值不正確」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn