如何更改MySQL列的排序规则类型?

Mik*_*keN 18 mysql django utf-8

我有utf-8 Vs. 这里提到的字节串问题:Django头痛与简单的非ascii字符串

我不关心MySQL列中的区分大小写匹配,我只是总是想要返回UTF-8字符串,因为我发现不可能处理为非ascii文本返回字符列的字节串.

如何更改我的MySQL排序规则类型,以便始终通过Django返回UTF-8字符串?

Ero*_*eal 25

您需要了解数据库/表/列级别的字符集/排序规则设置.列级设置优先于其他设置.因此,我将包含可用于在db的每个级别执行这些更改的命令.


检查您当前的配置(数据库):

SHOW CREATE DATABASE db_name;

检查您当前的配置(表):

SHOW TABLE STATUS WHERE name='tbl_name'

检查当前配置(列):

SHOW FULL COLUMNS FROM tbl_name;


更改字符集/排序规则(数据库):

ALTER DATABASE db_name DEFAULT CHARACTER SET utf8;

更改字符集/排序规则(表格):

ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8;

更改字符集/排序规则(列):

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;

  • 表选项和列选项有什么区别?似乎他们都改变了整个表的排序规则 (2认同)

ale*_*mov 5

在Django中,您必须编写自己的迁移文件:

./manage.py makemigrations --empty app_name
Run Code Online (Sandbox Code Playgroud)

并使用以下sql命令填充空白迁移:

# -*- 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;'),
    ]
Run Code Online (Sandbox Code Playgroud)