utf 8 - Delphi XE, Firebird and UTF8 -
i'm upgrading d7 program xe, , under delphi 7 had code this...
parambyname ('somefield').asstring:=someutf8rawbytestring;
under xe if someutf8rawbytestring contains unicode characters such cyrillic script, appear ???? in db.
i see someutf8rawbytestring 8 characters long, 4 character string, correct. in db there 4 characters.
i'm using firebird 2 through tibquery xe , updating varchar field character type 'none'.
so looks utf8 being detected , converted somehow unicode data points, , failing string conversion db. i've tried setting varchar field utf8 encoding same result.
so how should handled?
edit: can use database tool , edit db field have non-ascii data , when read comes utf8 encoded string can use utf8decode on , it's correct. writing data field seems impossible without getting bunch of ???? in db. i've tried parambyname ('somefield').asstring:=somewidestring; , parambyname ('somefield').aswidestring:=somewidestring; , rubbish in db...
edit2: here's code (in 1 iteration) ...
procedure tformnameedit.savename(id : integer); begin datamodule.updatenamequery begin parambyname ('name').asstring:=utf8encode(nameedit.text); parambyname ('id').asinteger:=id; execsql; transaction.commit; end; end;
as @lightbulb recommended, adding lc_ctype=utf8 tibdatabase params solved problem.
Comments
Post a Comment