Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Malformed string when inserting UTF8 database

I use Delphi 2010, Firebird 2.5.2, IBExpress components.

Database charset is UTF8. In db-connection UTF8.

Database:

var 
  Database: TIBDatabase;
begin
  ...
  Database.params.Clear;
  Database.params.Add('user ''SYSDBA'' password ''masterkey'' ');
  Database.params.Add('page_size 16384');
  Database.params.Add('default character set UTF8');

Table:

CREATE TABLE NEW_TABLE (
    NEW_FIELD  VARCHAR(255)
);

connection code:

  Database.params.Clear;
  Database.params.Add('user_name=SYSDBA');
  Database.params.Add('password=masterke');
  Database.params.Add('sql_role_name=UTF8');
  Database.Open;

insert code:

var
  IBSQL: TIBSQL;
begin
  IBSQL := TIBSQL.Create(nil);
  try
    IBSQL.Database := db;
    IBSQL.Transaction := tr

    IBSQL.SQL.Text := 'insert into NEW_TABLE (NEW_FIELD) values (:param)';

    IBSQL.params[0].Value := 'Ãabc©'; // unsupported symbols :(

    if not IBSQL.Transaction.Active then
      IBSQL.Transaction.StartTransaction;

    IBSQL.ExecQuery; // "Malformed string" exception here

    if IBSQL.Transaction.Active then
      IBSQL.Transaction.Commit;
  finally
    FreeAndNil(IBSQL);
  end;
end;

I get "Malformed string" exception. How to insert this string?

like image 799
barbaris Avatar asked May 30 '13 10:05

barbaris


1 Answers

Make sure that the charset of your field is UTF-8.

When creating a new field, you have two options:

  1. Create a domain with the default charset and collate and set the field with the domain
  2. Create the field without domain, setting the charset and collate manually.

In the image below , is displayed the field created with the domain using the IBExpert.

IBExpert with domain and charset

like image 172
lampada Avatar answered Sep 22 '22 00:09

lampada