2015-08-27 4 views

ответ

7

Изменение набора символов по умолчанию влияет только на столбцы создан (без явного набора символов) после изменения. Существующие столбцы не затрагиваются, поскольку набор символов является свойством каждого отдельного столбца. Это означает, что вам нужно изменить все (соответствующие) столбцы.

Есть несколько проблем

  1. Firebird не изменяет данные на альтер время, но вместо этого создает новую версию формата, и преобразования на лету из старого формата в новый формат в выберите время.
    Это влияет на производительность, но также может привести к ошибкам преобразования строк во время выполнения (например, потому что символ UTF-8 не существует в ISO-8859-1).
  2. Изменение набора символов работает корректно, если в настоящий момент в столбце имеется реальный набор символов (например, кроме NONE или OCTETS). Преобразование из NONE или OCTETS в другой набор символов может привести к ошибкам преобразования строк или мусора, поскольку контент может не соответствовать вашим ожиданиям или, возможно, неверным байтам в целевом наборе символов.
  3. Некоторые версии - IIRC - на самом деле не изменить набор символов на всех

Для решения этих проблем, которые вы можете сделать:

  1. Экспорт DDL из вашей базы данных, определения набора символов изменения, создать новую базу данных и использовать инструмент данных насоса (например, FBCopy), чтобы скопировать данные из старого к новому
  2. или, для каждого столбца вы хотите изменить:
    • Создать новый столбец
    • UPDATE table SET newcolumn = oldcolumn (или если oldcolumn является NONE или OCTETS: UPDATE table SET newcolumn = cast(cast(oldcolumn as VARCHAR(...) CHARACTER SET assumedcharset) as VARCHAR(...) CHARACTER SET targetcharset)
    • Капля старый столбец
    • переименуйте новый столбец
    • устранить любые другие проблемы с зависимостями (индексы, триггеры, внешние ключи и т.д.)

Этот второй вариант является предпочтительным, если только вы хотите изменить небольшую базу данных (в терминах таблиц, столбцов и зависимостей), или вы необходимо выполнить нечетные преобразования, иначе я бы настоятельно рекомендовал использовать решение для накачки данных.

+0

Thx для справки, я попробую это и расскажу вам выводы. – Quiron

+0

Кажется, что работает, спасибо за ответ! Ты спасаешь мой день! – Quiron

-1
ALTER CHARACTER SET ISO8859_1 
SET default COLLATION ES_ES; 

Сценарий - выполните эту операцию в своей активной базе данных, которую вы хотите изменить!

+1

Это не меняет набор символов столбцов, это меняет настройку по умолчанию заданного набора символов –

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