Как изменить тип сортировки для столбца MySQL? - PullRequest
18 голосов
/ 18 мая 2011

У меня есть utf-8 Vs.проблемы байтовых строк, упомянутые здесь: Головная боль Django с простой строкой, отличной от ascii

Мне не важно совпадение с учетом регистра в столбцах MySQL, я просто хочу, чтобы строки UTF-8 возвращались, потому чтоЯ считаю, что невозможно иметь дело с байтовыми строками, возвращаемыми для символьных столбцов для текста, отличного от ascii.

Как изменить тип сортировки MySQL, чтобы строки UTF-8 всегда возвращались через Django?

Ответы [ 4 ]

25 голосов
/ 19 мая 2011

Вам необходимо знать о настройках набора символов / параметров сортировки на уровне базы данных / таблицы / столбца.Настройки на уровне столбцов имеют приоритет над остальными.Из-за этого я включаю команды, которые вы можете использовать для выполнения этих изменений на каждом уровне базы данных.


Проверка текущей конфигурации (базы данных):

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;

5 голосов
/ 11 июля 2016

В django вы должны написать свою собственную миграцию:

./manage.py makemigrations --empty app_name

и заполнить пустую миграцию с помощью этой команды 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;'),
    ]
4 голосов
/ 31 декабря 2014

Обратите внимание, что если вы действительно хотите изменить параметры сортировки только для одного столбца (я не могу понять, почему вы можете, но кто знает), то это синтаксис для изменения столбца TEXT с именем DESCRIPTION в ITEMS таблица в UTF-8, двоичная, ненулевая:

ALTER TABLE ITEMS CHANGE DESCRIPTION DESCRIPTION TEXT CHARACTER SET utf8
    COLLATE utf8_bin NOT NULL;

Не существует чувствительного к регистру сопоставления UTF-8 как такового , но сопоставление utf8_bin работает в большинстве случаев.

3 голосов
/ 18 мая 2011
ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...