2010-08-22 3 views
2

데이터베이스가 있고 클라이언트가 Delphi 2007로 작성되었습니다. 최신 Interbase 2009가 사용되었습니다. 데이터베이스가 오래되었습니다. 저는이 데이터베이스가 2002 년경에 만들어졌으며 지금은 25GB 이상이라고 믿습니다. 최근에 나는 IBConsoleInterbase 용 기존 데이터베이스의 문자 집합을 변경하는 방법

에서

upper('åäö')

가 'AAO'를 생성하는 것을 발견했다. 'ÅÄÖ'이어야합니다. 이것은 영어 알파벳에없는 스웨덴어 문자입니다.

주제를 검색 한 결과 link입니다. 중요한 부분은 다음과 같습니다

가 어떻게 기존 데이터베이스의 기본 문자 설정을 변경할 수 있습니다

? 이 작업을 수행하는 데 지원되는 방법이 없습니다 ( ). 은 메타 데이터에서 데이터베이스를 다시 만들어야합니다.

이 블로그는 2004-06-29 Craig Stuntz에 의해 작성되었습니다. Interbase는 그 이후 발전해 왔으며 Interbase 2009의 문자 집합을 약간 변경하여 변경하는 방법이 있습니다. 가능한 경우 gbk 백업 파일에서 수행 할 수 있습니까? 마지막 옵션은 올바른 문자셋으로 완전히 새로운 데이터베이스를 생성하고 이전의 데이터를 펌핑하는 것입니다.

그래서 두 가지 질문이 있습니다.

  1. 가장 쉬운 문자셋을 변경하는 방법은 무엇입니까?
  2. 내가 ('AAO') 상단을 선택해야합니까 characterset = 'AAO'

편집 : 크레이그으로는 캐릭터 세트 인식 데이터를 복사 제외하고 실제 방법이 없다고 말했다. 그래서 나는 다른 방법을 택했다.

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에서 얻은 결과이므로이 경우 스웨덴어 문자를 소문자로 변환하면됩니다. 어쩌면 가장 좋은 해결책은 아니지만 그것이 효과가 있다고 생각합니다.

답변

3

스웨덴어는 ISO-8859-1 또는 UNICODE를 사용합니다. IB 2009의 기존 DB에서 기본 문자 세트를 변경하는 새로운 방법에 익숙하지 않습니다. 무엇이 관련되어 있는지 생각해 보면 어쨌든 DB를 다시 만들 것입니다. 당신은 DB에있는 모든 텍스트의 저장 형식을 바꿀 것입니다!

데이터를 펌프하는 가장 쉬운 방법은 아마도 DB Workbench과 같은 전용 데이터 펌프 일 것입니다. 이를 위해 "Pro"판이 필요합니다. 그러나 작동하는지 확인하기위한 무료 평가판이 있습니다. 다시 말하지만, 데이터를 직접 복사 할 수는 없을 수도 있습니다. 당신은 charset-aware 방식으로 그것을해야 할 것이다. 이것이 바로 유럽인으로부터 DB 관리 도구를 구매해야하는 이유입니다. :)

+0

이 내가 두려워 대답했다 ...하지만.아마도 응용 프로그램을 실행하기위한 전체 작업이었을 것입니다. :-)하지만 그것은 삶입니다. 나는 그 주위를 코드화 할 수 있었지만 DB에 올바른 문자 세트를 갖는 것이 더 좋을 것이다. –

4

FBClone이라는 무료 명령 줄 도구 유틸리티가 있습니다. 문자 집합을 변경하는 데이터베이스를 다시 만들 수 있습니다. 프로젝트에서 UIB 구성 요소를 사용하므로 Interbase 또는 Firebird를 사용할 수 있습니다. 이 데이터베이스는 캐릭터 세트 같은 것들의 아무도 생각을 만들어 때 http://code.google.com/p/fbclone/

+0

저에게는 매우 흥미로운 소식이었습니다. 문자 집합으로 InterBase 2009 용 DB를 성공적으로 변환 한 것에 대한 참고 사항이 있습니까? –

+0

개인 정보가 아니지만이 유틸리티를 사용하여 Firebird 데이터베이스를 UTF8로 마이그레이션했습니다. 데이터베이스의 charset은 데이터베이스에 연결하는 데 사용되는 charset과 다를 수 있습니다.이 경우 데이터베이스 엔진은 자동으로 음역을 사용합니다. 이 유틸리티는 데이터베이스 엔진이 소스 데이터베이스와 대상에 연결하기 위해 동일한 문자 집합을 사용하여 음역을 수행하게하는 개념입니다. 나는 당신이 NONE이라는 charset을 사용했다고 생각한다. 그래서 당신의 경우에는 charset NONE을 사용하여 문자열을 변경하지 않아야한다. –

0
update RDB$DATABASE set RDB$CHARACTER_SET_NAME = 'UTF8' 
관련 문제