Utilisez utf8mb4 avec Django1.7 + MySQL5.5 ou supérieur
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'hoge',
'USER': 'hoge',
'OPTIONS': {
'charset': 'utf8mb4',
}
}
}
models.py
from django.db import models
class User(models.Model):
screen_name = models.CharField(max_length=255, unique=True)
Puisque la migration peut être utilisée à partir de la série Django 1.7, utilisez-la pour définir le modèle
create-db
create database hoge DEFAULT CHARSET utf8mb4;
shell
$ python manage.py makemigrations
$ python manage.py migrate
> django.db.utils.OperationalError: (1709, 'Index column size too large. The maximum column size is 767 bytes.')
Un problème de taille d'index InnoDB courant
http://blog.kamipo.net/entry/2012/11/13/102024 Il est bon d'utiliser ʻinnodb_large_prefix` comme c'est le cas ici
my.cnf
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix
Mais comment spécifiez-vous ROW_FORMAT?
http://qiita.com/miyagi389/items/ffc9918fd8ef2f2a1a45
Cependant, cela ne se reflète pas dans le modèle réalisé avec les migrations! !!
manage.py
#!/usr/bin/env python
# coding: utf-8
from __future__ import unicode_literals
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testapp.settings")
from django.db.backends.mysql.schema import DatabaseSchemaEditor
DatabaseSchemaEditor.sql_create_table += " ROW_FORMAT=DYNAMIC"
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
ROW_FORMAT = DYNAMIC est maintenant appliqué même en migration!
En fonction du module intégré à Django Certains d'entre eux ne prennent pas en charge la migration, utilisez donc les deux en combinaison.
Recommended Posts