Dennis Poon  wrote / napísal(a):


LacaK wrote:
Dennis Poon  wrote / napísal(a):

I tried, the results are:

@@character_set_client      : utf8
@@character_set_connection  : latin1
@@character_set_database   : latin1


Dennis, do you received my reply?:

IMO @@character_set_connection is wrong and must be utf8.
I will try fix it, but first can you try as workaround this:
- after connection is established can you use MySQLConnection1.ExecuteDirect('SET NAMES ''utf8'''); - and then check again @@character_set_client, @@character_set_connection (IMO both must be utf8 ... if they will be, then your program should work as expected ... can you test it again?)

-Laco.

I tried  MYSQLConnection1.ExecuteDirect('SET NAMES ''utf8'';');
and recheck
  @@character_set_client    : utf8
  @@character_set_connection : utf8
  @@character_set_database : latin1

So, it corrected one variable.
This is okay now


I re-ran my test but still  ?????? after applyUpdates.
When I use your test program I receve same result as you describe.
But when I add into procedure TForm1.FormCreate(Sender: TObject);
begin
 MySQL55Connection1.ExecuteDirect('SET NAMES ''utf8''');  // <-- ADDED
 SQLQuery1.Open;
end;

It works for me as expected ... so now I am confused with your results ... can you try again please your test application with added line ... (it will require patch for mysqlconnection in all cases, but before want have confirmed, that it helps)

-Laco.



My apology.
no problem :-)
My last attempt did not recreate a fresh database table for testing so it started with the ruined table values and thus did not give the correct result.
Your Set Names command did the trick.
Thanks a lot.
I am happy, that mystery is solved and it works now.
I will patch it in mysqlconnection so extra SET NAMES will not be required in the future.


By the way, why isn't a semicolon required at the end of SET NAMES 'utf8' command? I tried both with and without semicolon and neither raise an error.
Seems, that MySQL is tolerant to this.
MySQL supports MULTI_STATEMENTS, which enables client to pass multiple statements separated by ";" in one string. So may be, that MySQL interprets ";" as delimiter between multiple statements on one batch. If you use only one sql statement it is always better do not use terminating ";" IMHO

-Laco.

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to