mysql - language_code - internacionalizacion django
¿Cómo cambias el tipo de colación para una columna MySQL? (4)
Estoy teniendo el utf-8 vs. Problemas de cadena de bytes mencionados aquí: Django headache con cadena simple que no es ascii
No me importa la coincidencia entre mayúsculas y minúsculas en las columnas de MySQL, siempre quiero que se devuelvan las cadenas UTF-8 porque encuentro que es imposible tratar con las cadenas de bytes que se devuelven para las columnas de caracteres para el texto que no es ASCII.
¿Cómo cambio mi tipo de colación de MySQL para que las cadenas UTF-8 siempre se devuelvan a través de Django?
Debe tener en cuenta la configuración del conjunto de caracteres / intercalación en los niveles de base de datos / tabla / columna. Las configuraciones de nivel de columna tienen prioridad sobre las demás. Debido a esto, estoy incluyendo comandos que puede usar para realizar estos cambios en cada nivel de la db.
Inspecciona tu configuración actual (base de datos):
SHOW CREATE DATABASE db_name;
Inspecciona tu configuración actual (tabla):
SHOW TABLE STATUS WHERE name=''tbl_name''
Inspecciona tu configuración actual (columnas):
SHOW FULL COLUMNS FROM tbl_name;
Cambiar el conjunto de caracteres / colación (base de datos):
ALTER DATABASE db_name DEFAULT CHARACTER SET utf8;
Cambiar el conjunto de caracteres / colación (tabla):
ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8;
Cambiar el conjunto de caracteres / colación (columnas):
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
En django debes escribir tu propia migración:
./manage.py makemigrations --empty app_name
Y llene la migración vacía con estos comandos de SQL como este:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
(''app'', ''0008_prev_migration''),
]
operations = [
migrations.RunSQL(''ALTER DATABASE db_name DEFAULT CHARACTER SET utf8;''),
migrations.RunSQL(''ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8;''),
migrations.RunSQL(''ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;''),
]
Tenga en cuenta que si realmente desea cambiar la intercalación de una sola columna (no puedo pensar por qué, pero quién sabe), esta es la sintaxis para modificar una columna de TEXT
denominada DESCRIPTION
en la tabla de ITEMS
a UTF-8. binario, no nulo:
ALTER TABLE ITEMS CHANGE DESCRIPTION DESCRIPTION TEXT CHARACTER SET utf8
COLLATE utf8_bin NOT NULL;
No existe una clasificación UTF-8 que utf8_bin
mayúsculas y minúsculas, pero la utf8_bin
funciona para la mayoría de los casos.
ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci