How do you change the collation type for a MySQL column? How do you change the collation type for a MySQL column? django django

How do you change the collation type for a MySQL column?


You need to be aware of the character-set/collation settings at the database/table/column levels. Column-level settings take precedence over the others. Because of this, I'm including commands you can use to perform these changes at each level of the db.


Inspect your current configuration (database):

SHOW CREATE DATABASE db_name;

Inspect your current configuration (table):

SHOW TABLE STATUS WHERE name='tbl_name'

Inspect your current configuration (columns):

SHOW FULL COLUMNS FROM tbl_name;


Change the character-set/collation (database):

ALTER DATABASE db_name DEFAULT CHARACTER SET utf8;

Change the character-set/collation (table):

ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8;

Change the character-set/collation (columns):

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;


In django you must write your own migration:

./manage.py makemigrations --empty app_name

And fill empty migration with these sql command like this:

# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.db import models, migrationsclass 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;'),    ]


ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci