Подтвердить что ты не робот

Как изменить тип сортировки для столбца MySQL?

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

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

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

4b9b3361

Ответ 1

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

ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

Ответ 3

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

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

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

Ответ 4

В 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;'),
    ]