데이터베이스가 있고 클라이언트가 Delphi 2007로 작성되었습니다. 최신 Interbase 2009가 사용되었습니다. 데이터베이스가 오래되었습니다. 저는이 데이터베이스가 2002 년경에 만들어졌으며 지금은 25GB 이상이라고 믿습니다. 최근에 나는 IBConsoleInterbase 용 기존 데이터베이스의 문자 집합을 변경하는 방법
에서upper('åäö')
가 'AAO'를 생성하는 것을 발견했다. 'ÅÄÖ'이어야합니다. 이것은 영어 알파벳에없는 스웨덴어 문자입니다.
주제를 검색 한 결과 link입니다. 중요한 부분은 다음과 같습니다
가 어떻게 기존 데이터베이스의 기본 문자 설정을 변경할 수 있습니다
? 이 작업을 수행하는 데 지원되는 방법이 없습니다 ( ). 은 메타 데이터에서 데이터베이스를 다시 만들어야합니다.
이 블로그는 2004-06-29 Craig Stuntz에 의해 작성되었습니다. Interbase는 그 이후 발전해 왔으며 Interbase 2009의 문자 집합을 약간 변경하여 변경하는 방법이 있습니다. 가능한 경우 gbk 백업 파일에서 수행 할 수 있습니까? 마지막 옵션은 올바른 문자셋으로 완전히 새로운 데이터베이스를 생성하고 이전의 데이터를 펌핑하는 것입니다.
그래서 두 가지 질문이 있습니다.
- 가장 쉬운 문자셋을 변경하는 방법은 무엇입니까?
- 내가 ('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에서 얻은 결과이므로이 경우 스웨덴어 문자를 소문자로 변환하면됩니다. 어쩌면 가장 좋은 해결책은 아니지만 그것이 효과가 있다고 생각합니다.
이 내가 두려워 대답했다 ...하지만.아마도 응용 프로그램을 실행하기위한 전체 작업이었을 것입니다. :-)하지만 그것은 삶입니다. 나는 그 주위를 코드화 할 수 있었지만 DB에 올바른 문자 세트를 갖는 것이 더 좋을 것이다. –