簡體   English   中英

如何創建 Django 遷移來為所有現有表和所有未來表設置字符集和排序規則?

[英]How do I create a Django migration to set charset and collation for all existing tables and all future ones?

我正在使用 Django、Python 3.7 和 MySql 5.7。 我想將所有現有表和所有未來表的默認字符集和排序規則設置為

DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

我已經創建了一些遷移,

(venv) localhost:maps davea$ ls web/maps/migrations/
0001_initial.py  __init__.py  __pycache__

有什么辦法可以創建這樣的遷移嗎? 如果需要的話,我很高興擺脫數據庫並從頭開始。

你必須改變數據庫的CHARSET,django 與它無關: How to convert a entire MySQL database characterset and collat​​ion to UTF-8?

我現在遇到了這個問題,我嘗試創建一個新記錄,其中django.db.models.TextField()類型的field_x的值包含表情符號。 結果報錯:

django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x99\\x82 :...' for column `db_name`.`table_name`.`field_x` at row 1")

我在proj/settings.py專門在DATABASES字段下將字符集設置為 utf8mb4:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "any",
        "USER": "any",
        "PASSWORD": "any",
        "HOST": "any",
        "PORT": "any",
        "OPTIONS": {
            "charset": "utf8mb4",
        },
    }
}

唱片的創作取得了成功。 此外,獲取創建的記錄表明它正確包含保存的表情符號。

>>> record = TableName.objects.get(id=93)
>>> record.field_x
'masters trickeds us!!!      MYYYYY PRECIOOOOOUS~!  :) 🙂 :) ^_^🙂^__^'

您可以檢查一些進一步的參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM