MySQL MariaDB

Django 支援 MySQL 5.5 及更高版本。

確保安裝了一些軟體包:

$ sudo apt-get install mysql-server libmysqlclient-dev
$ sudo apt-get install python-dev python-pip              # for python 2
$ sudo apt-get install python3-dev python3-pip            # for python 3

以及一個 Python MySQL 驅動程式(mysqlclient 是 Django 的推薦選擇):

$ pip install mysqlclient    # python 2 and 3
$ pip install MySQL-python   # python 2
$ pip install pymysql        # python 2 and 3

Django 無法設定資料庫編碼,但需要在資料庫級別進行配置。在 my.cnf(或/etc/mysql/mariadb.conf/*.cnf)中查詢 default-character-set 並設定編碼:

   [mysql]
   #default-character-set = latin1    #default on some systems.
   #default-character-set = utf8mb4   #default on some systems.
   default-character-set = utf8

   ...
   [mysqld]
   #character-set-server  = utf8mb4
   #collation-server      = utf8mb4_general_ci
   character-set-server  = utf8
   collation-server      = utf8_general_ci

MySQL 或 MariaDB 的資料庫配置

#myapp/settings/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB_NAME',
        'USER': 'DB_USER',
        'PASSWORD': 'DB_PASSWORD',
        'HOST': 'localhost',   # Or an IP Address that your database is hosted on
        'PORT': '3306',
        #optional:
        'OPTIONS': {
            'charset' : 'utf8',
            'use_unicode' : True,
             'init_command': 'SET '
                'storage_engine=INNODB,'
                'character_set_connection=utf8,'
                'collation_connection=utf8_bin'
                #'sql_mode=STRICT_TRANS_TABLES,'    # see note below
                #'SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
        },
        'TEST_CHARSET': 'utf8',
        'TEST_COLLATION': 'utf8_general_ci',
    }
}

如果你使用的是 Oracle 的 MySQL 聯結器,則 ENGINE 系列應如下所示:

'ENGINE': 'mysql.connector.django',

建立資料庫時,請確保指定編碼和排序規則:

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin

從 MySQL 5.7 開始以及 MySQL 5.6 的全新安裝,sql_mode 選項的預設值包含 STRICT_TRANS_TABLES 。在插入資料時截斷資料時,該選項會將警告升級為錯誤。Django 強烈建議啟用 MySQL 的嚴格模式以防止資料丟失(STRICT_TRANS_TABLES 或 STRICT_ALL_TABLES)。要啟用新增到 /etc/my.cnf sql-mode = STRICT_TRANS_TABLES