Einzelnen Beitrag anzeigen

christophspaeth

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

Firebird Character Set ändern

  Alt 18. Sep 2013, 16:46
Datenbank: Firebird • Version: 2.5 • Zugriff über: UIB
Hallo zusammen,

Beim Portieren eines älteren Datenbankprojektes von Delphi 2006 auf XE2, also Unicode, bin ich auf ein Problem mit meiner Datenbank gestoßen.

In der DB ist soweit ich das überblicke kein Character set oder collation hinterlegt; die Daten sind aber als UTF8 hinterlegt (hier muss ich noch überprüfen, ob das wirklich für alle chars und varchars gilt)
Bisher wurde mittels AnsiToUtf8() UTF-8 Codiert und direkt in das SQL-Statement eingebettet
query.sql.text := 'update mytable set name= ' + SqlQuoteAndEscape(AnsiToUtf8('Müller')) + ...

Bei der Umstellung auf Unicode wird das vermutlich so nicht mehr funktionieren, außerdem möchte ich in dem Zuge gleich auf prepared statements umstellen.
Das manuell nach UTF8 zu codieren und dann als RawByteString übergeben funktioniert zwar,
query.Params.ByNameAsRawByteString['name'] := UTF8Encode('Müller');
ich frage mich aber, ob es nicht sinnvoller/richtiger wäre, die Charset-Information in der Datenbank zu hinterlegen, dann müsste es ja reichen, einfach den (Unicode)String zuzuweisen:
query.Params.ByNameAsString['name'] := 'Müller';

Hier stehe ich nur vor der Frage, ob das so einfach geht bzw. welche Nebenwirkungen das haben kann.
Laut Firebird-Dokumentation müsste das Umstellen ja mit
Code:
alter character set utf8 set default collation unicode_ci_ai;
möglich sein?
[Edit: Anscheinend wird damit die default Collation für das angegebene charset geändert, und nicht wie von mir angenommen das default charset der DB]

Nachdem ich die collations noch nicht so ganz verstanden habe und es doch diverse Themen zu Konvertierungsproblemen mit nicht unterstützten/vorhandenen collations gibt, frage ich lieber einmal zu häufig.

Also die Fragen nochmal zusammengefasst:
1. Kann ich relativ gefahrlos den Zeichensatz meiner Datenbank ändern?
2. Muss ich dabei auf etwas aufpassen?
3. Gibt es Gründe, warum die DB nichts über den verwendeten Zeichensatz wissen soll und ich das besser so lasse wie es ist?

Danke für's Lesen (und hoffentlich auch Antworten )
Christoph Späth

Geändert von christophspaeth (19. Sep 2013 um 10:47 Uhr) Grund: Berichtigung/neue Erkenntnisse eingefügt
  Mit Zitat antworten Zitat