Verwenden Sie utf8mb4 mit Django1.7 + MySQL5.5 oder höher
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)
Da die Migration aus der Django 1.7-Serie verwendet werden kann, definieren Sie damit das Modell
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.')
Ein häufiges Problem mit der InnoDB-Indexgröße
http://blog.kamipo.net/entry/2012/11/13/102024
Es ist gut, innodb_large_prefix
zu verwenden, wie es hier ist
my.cnf
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix
Aber wie spezifizieren Sie ROW_FORMAT?
http://qiita.com/miyagi389/items/ffc9918fd8ef2f2a1a45
Dies spiegelt sich jedoch nicht in dem mit Migrationen erstellten Modell wider! !!
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 wird jetzt auch bei der Migration angewendet!
Abhängig vom in Django eingebauten Modul Einige von ihnen unterstützen die Migration nicht. Verwenden Sie daher beide in Kombination.
Recommended Posts