Задать вопрос
RusMikle
@RusMikle
Программист

Перевод базы FireBird 2.5 на юникод. Поделитесь опытом и ссылками

Доброе время суток.
Стоит задача перевести базу FireBird 2.5 на юникод (очень много хранимок). (клиент Delphi XE2 + IBDAC, IBExpress).
Посоветуйте что почитать, поделитесь ссылками, дабы сделать сие преобразование менее болезненным.
Возможно кто то из присутствующих уже переводил базу на юникод. Какие подводные камни могут встретиться.
Приветствуются любые ссылки (Английские, Немецкие и Русские).

Спасибо.
  • Вопрос задан
  • 4761 просмотр
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
Greendq
@Greendq
А что там сложного? Самый простой способ — выгружаете базу в скрипт, пересохраняете её в UTF8, редактируете скрипт с указанием нухной кодировки и заливаете обратно.

Или вам надо и сами данные в текстовых полях и блобах конвертировать?

P.S. Мы у себя с версии 1.5 изначально всё в уникод перевели и проблем при последовательном переходе не возникало :)
Ответ написан
Greendq
@Greendq
А блобы каких размеров? Если выгрузить их в текстовый файл и конвертировать его — не проще ли будет? IBE выгружает их в *.lob — но он выгружает и бинарные блобы тоже, так что надо очень осторожно подходить к конвертированию.

Если бинарных блобов нет — то можно обойтись только конвертированием скриптов и их редактированием (учитывайте, что varchar(30000) уже не пройдёт).

Если же у вас есть и бинарные блобы — то тогда придётся делать как минимум в 2 прохода — сначала сами метаданные, потом данные. Но это деликатная операция, особенно при наличие треггеров и проверок ссылочной целостности — тут потребуется писать приложение, которое умно всё перезальёт.
Ответ написан
Комментировать
@BorHblK
Был Support, Стал QA
Переводили БД с 1251 в ЮТФ8, использовали инструмент IBExpert - Blocks. Блобы выгружали в *.lob, все данные выгружалилсь в *.sql затем инсертились в чистую БД уже в УТФ8. Переносили данные + генераторы. Найденные камни: база должна быть в монопльном доступе, ограничение на кол-во символов 8000, делаем бекапы посредствои gbak - он не умеет изменять (или пока не нашли) database pagesize во время рестора, а если меньший pagesize то некоторые данные просто не влазят и вываливается эррор "This operation is not defined for system tables.Unsuccessful metadata update.
Key size exceeds implementation restriction for index "index_name"
есть такая ссылочка www.firebirdfaq.org/ip_ib_indexcalculator.htm
з.ы. ФБ 2.0.3
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы