Как изменить символы существующей базы данных для InterBase

StackOverflow https://stackoverflow.com/questions/3543003

Вопрос

У нас есть база данных, и наш клиент написан с Delphi 2007. Последняя Interbase 2009 используется. База данных старая, я считаю, что она была создана около 2002 года и теперь составляет более 25 ГБ. Недавно я обнаружил, что в IBConsole

upper('åäö')

генерировать «Åä ...». Это должно быть «Åä ...». Это шведские персонажи, которые отсутствуют в английском алфавите.

Я искал об эту тему и нашел это связьОтказ Важная часть:

Как я могу изменить набор символов по умолчанию существующую базу данных? Нет поддерживаемого способа сделать это. Вы должны воссоздать базу данных из метаданных.

Этот блог был написан на 2004-06-29 годы Craig Shuntz, моя надежда заключается в том, что InterBase эволюционировал с тех пор, и есть способ изменить символы для InterBase 2009 с небольшими усилиями. Если невозможно, можно сделать из файла резервного копирования GBK? Последний вариант - создать совершенно новую базу данных с правильными символами и как-то данные накачки от старого.

Поэтому у меня есть 2 вопроса.

  1. Какой самый простой способ изменить персонажи?
  2. Какие персонажи я должен выбрать, чтобы иметь верхний («Åä ...») = 'ÅÄ ...'

РЕДАКТИРОВАТЬ: Как сказал Крейг, нет реального способа, кроме копирования данных, которые знают, что это характер. Так что я выбираю другой путь.

vName := AnsiUpperCase(Nametosearch);
MakeCharLowercase(vName, 'åäö');
// Then use vName when search in database.

procedure TDuplicateDeptForm.MakeCharLowercase(var aName: String; aCharSet: String);
var
  vIndex, i: Integer;
  vChar: String;
begin
  for i := 1 to Length(aCharSet) do
  begin
    vChar := AnsiUpperCase(aCharSet[i]);
    repeat
      vIndex := AnsiPos(vChar, aName);
      if vIndex > 0 then
        aName[vIndex] := AnsiLowerCase(vChar)[1];
    until vIndex = 0;
  end;
end;

Это просто преобразует задние шведские символы в этом случае на строчные буквы, так как это результат, который я получаю от InterBase. Может быть, не самое лучшее решение, но я думаю, что это работает.

Это было полезно?

Решение

Для шведского использования ISO-8859-1 или Unicode. Я не знаком с каким-либо новым способом изменить Charset по умолчанию в существующих DBS в IB 2009. Когда вы думаете о том, что вовлечено, вы увидите, вы все равно воссоздаете БД; Вы бы меняли формат хранения всего текста в БД!

Самый простой способ прокачки данных - это, вероятно, является выделенным насосом данных, как один в DB Workbench. Отказ Вам нужна редакция «Pro» для этого, но есть бесплатная пробная версия, чтобы увидеть, работает ли он. Опять же, считайте, что вы не сможете просто непосредственно копировать данные; Вам придется сделать это в аренду. Вот почему вы всегда должны купить инструмент управления БД из европейского человека. :)

Другие советы

Существует бесплатная утилита инструментов командной строки с именем FBCLONE: он способен воссоздать вашу базу данных, изменяющий набор символов. Проект использует компоненты UIB, поэтому он способен использовать Интербазу или Firebird.http://code.google.com/p/fbclone/

update RDB$DATABASE set RDB$CHARACTER_SET_NAME = 'UTF8'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top