26π
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;
5π
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_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;'),
]
- [Django]-Default filter in Django model
- [Django]-Django middleware difference between process_request and process_view
- [Django]-Django β Clean permission table
- [Django]-Why there are two process when i run python manage.py runserver
- [Django]-Django REST Framework : "This field is required." with required=False and unique_together
- [Django]-Exclude fields in Django admin for users other than superuser
4π
Note that if you really did want to change the collation for just one column (I canβt think why you might, but who knows) then this is the syntax to alter a TEXT
column called DESCRIPTION
in the ITEMS
table to UTF-8, binary, non-null:
ALTER TABLE ITEMS CHANGE DESCRIPTION DESCRIPTION TEXT CHARACTER SET utf8
COLLATE utf8_bin NOT NULL;
There isnβt a case-sensitive UTF-8 collation per se but the utf8_bin
collation works for most cases.
- [Django]-Django annotation with nested filter
- [Django]-Django Installed Apps Location
- [Django]-Django.contrib.auth.logout in Django