ALTER DATABASE для изменения COLLATE не работает

Я использую Django на Bluehost. Я создал форму для ввода, сгенерированного пользователем, но ввод Unicode из этой формы не может быть сохранен или отображен из символов. Поэтому я сделал поиск в Google и Google, чтобы изменить набор сопоставлений и символов в моей базе данных. Я запускаю этот sql

ALTER DATABASE learncon_pywithyou CHARACTER SET utf8 COLLATE utf8_unicode_ci;

от python27 manage.py dbshell, который инициировал MySQL оболочку, то, что показывает на экране Query OK, 1 row affected (0.00 sec),

Поэтому я предполагаю, что проблема решена, но это не так. Этот sql ничего не сделал, как я позже найду в phpMyAdmin, предоставленном Bluehost. Все поля Varchar всех таблиц все еще находятся в lantin1_swedish_ci сверять.

Итак, предположим, что alter table должен работать вместо Я запускаю это на MySQLalter table mytable character set utf8 collate utf8_unicode_ci;

хотя на экране это показывает Query OK. 4 rows affected, он на самом деле ничего не сделал, сопоставление этих полей в mytable не изменился вообще.

Поэтому я наконец вручную изменил поля в phpMyAdmin для mytable и это работает, теперь я могу вставить в эту таблицу с Unicode, а также они отображаются правильно, но у меня есть около 20 таких таблиц, я не хочу менять их одну за другой вручную.

Есть ли у нас простой и эффективный способ изменения Collate каждого поля для хранения и отображения правильных юникодов?

2 ответа

Решение

В дополнение к @StuartLC, для изменения всех 20 таблиц кодировки и сопоставления используйте ниже запрос, Здесь мир - имя базы данных

SELECT 
CONCAT("ALTER TABLE ",TABLE_SCHEMA , ".",TABLE_NAME," CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci") AS AlterSQL
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = "world";

Выше все подготовит ALTER запросы, которые вам нужно выполнить.

Изменение параметров сортировки на уровне базы данных устанавливает значения по умолчанию для новых объектов - существующие параметры сортировки не будут изменены.

Точно так же на уровне таблицы это влияет только на новые столбцы (см. Комментарий внизу):

alter table mytable character set utf8 collate utf8_unicode_ci;

Однако для преобразования параметров сортировки существующих столбцов необходимо добавить convert to:

alter table mytable convert to character set utf8 collate utf8_unicode_ci;
Другие вопросы по тегам