Как изменить символы существующей базы данных для InterBase
-
30-09-2019 - |
Вопрос
У нас есть база данных, и наш клиент написан с Delphi 2007. Последняя Interbase 2009 используется. База данных старая, я считаю, что она была создана около 2002 года и теперь составляет более 25 ГБ. Недавно я обнаружил, что в IBConsole
upper('åäö')
генерировать «Åä ...». Это должно быть «Åä ...». Это шведские персонажи, которые отсутствуют в английском алфавите.
Я искал об эту тему и нашел это связьОтказ Важная часть:
Как я могу изменить набор символов по умолчанию существующую базу данных? Нет поддерживаемого способа сделать это. Вы должны воссоздать базу данных из метаданных.
Этот блог был написан на 2004-06-29 годы Craig Shuntz, моя надежда заключается в том, что InterBase эволюционировал с тех пор, и есть способ изменить символы для InterBase 2009 с небольшими усилиями. Если невозможно, можно сделать из файла резервного копирования GBK? Последний вариант - создать совершенно новую базу данных с правильными символами и как-то данные накачки от старого.
Поэтому у меня есть 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'