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;