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