2014-01-25 3 views
4

Я использую Django на Bluehost. Я создал форму для ввода пользователем, но входы Unicode из этой формы не могут быть сохранены или отображены в символах. Таким образом, я сделал SO и google-поиск, чтобы изменить набор Collate и Character моей базы данных. Я бегу Этот SQLALTER DATABASE изменить COLLATE не работает

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. Я бегу это на MySQL alter table mytable character set utf8 collate utf8_unicode_ci;

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

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

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

ответ

1

В дополнение к @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 запросы, которые нужно выполнить.

+0

Спасибо за этот опытный ответ, теперь я считаю, что эти СУБД действительно рассматривали автоматизацию в дизайне, даже с небольшим количеством ключевых слов. Это то, что я хочу, это должно сэкономить много времени. И спасибо за @StuartLC за полезную основу, «конвертировать в». – TonyTony

+0

То же самое, что и здесь: если в таблице ничего не конвертируется, кодировка остается неизменной - в этом случае вы должны использовать запрос без «конвертировать в». MariaDB 10.0.27. – korkman

4

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

Аналогично, на уровне стола, only new columns ( См комментарий в нижней) поражаются с этим:

alter table mytable character set utf8 collate utf8_unicode_ci; 

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

alter table mytable convert to character set utf8 collate utf8_unicode_ci; 
+3

Просто отбрасывая заметку: если в таблице ничего не конвертируется, кодировка остается неизменной - в этом случае вы должны использовать запрос без «конвертировать в». – korkman

+0

@korkman - Это была проблема с нашей базой данных, которую мы пытались обновить. Немного глупо, что он не обновит сортировку, если нет необходимости в преобразовании. – Origin

Смежные вопросы