Einzelnen Beitrag anzeigen

christophspaeth

Registriert seit: 7. Mär 2008
73 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Firebird Character Set ändern

  Alt 20. Sep 2013, 15:09
Ich habe mein Update jetzt durchgeführt. Für den Fall, dass jemand eine ähnliche Problemstellung hat (oder mir sagt, dass irgendwas von dem gemachten ganz gefährlich oder böse ist), beschreibe ich mal, was ich getan habe:

- einen offiziellen Weg, bei einer bestehenden Datenbank das default charset zu ändern habe ich nicht gefunden. Nachdem meiner Recherche zufolge bei Firebird das Client-Charset und Server-Charset zusammenpassen muss, ist das eh reine Metadata. Geändert werden kann das trotzdem in den Systemtabellen mit
Code:
update RDB$DATABASE set RDB$CHARACTER_SET_NAME = 'UTF8';
- bei der UIB muss dann auf der Connection noch das (Client-)Chaset angegeben werden:
Delphi-Quellcode:
// set database, user, password, client dll
DbConection.CharacterSet := csUTF8;
DbConection.Connected := true;
- Natürlich gab es noch Tabellen, die noch ANSI-Daten hatten. Nachdem das nur wenige Tabellen mit wenigen Einträgen waren, lauf ich da einzeln drüber und codiere von Hand um. Hier habe ich noch kein Charset auf der Verbindung geändert. Das Projekt ist auch noch auf Delphi 2006, deswegen auch kein ByNameAsRawByteString.
Delphi-Quellcode:
DBQueryRead.SQL.Text := 'select id, link_name from mytable';
DbQueryWrite.SQL.Text := 'update mytable set link_name=:Name where id=:ID';
// ignore int columns and columns with guaranteed pure ASCII data

DbQueryRead.Open();
while not DbQueryRead.Eof do
begin
    DbQueryWrite.Params.ByNameAsInteger['ID'] := DbQueryRead.Fields.ByNameAsInteger['id'];
    DbQueryWrite.Params.ByNameAsString['Name'] := AnsiToUtf8(DbQueryRead.Fields.ByNameAsString['link_name']);
    DbQueryWrite.Execute();
    
    DbQueryRead.Next();
end;
Grüße
Chris
Christoph Späth
  Mit Zitat antworten Zitat