@@ -310,7 +310,7 @@ TConnectionParameters = class(TObject)
310310 FIgnoreDatabasePattern: String;
311311 FPort, FSSHPort, FSSHLocalPort, FSSHTimeout, FCounter, FQueryTimeout, FKeepAlive, FSSLVerification: Integer;
312312 FSSHActive, FLoginPrompt, FCompressed, FLocalTimeZone, FFullTableStatus,
313- FWindowsAuth, FWantSSL, FIsFolder, FCleartextPluginEnabled: Boolean;
313+ FWindowsAuth, FWantSSL, FIsFolder, FCleartextPluginEnabled, FForceUnicode : Boolean;
314314 FSessionColor: TColor;
315315 FLastConnect: TDateTime;
316316 FLogFileDdl: Boolean;
@@ -375,6 +375,7 @@ TConnectionParameters = class(TObject)
375375 property LoginPrompt: Boolean read FLoginPrompt write FLoginPrompt;
376376 property WindowsAuth: Boolean read FWindowsAuth write FWindowsAuth;
377377 property CleartextPluginEnabled: Boolean read FCleartextPluginEnabled write FCleartextPluginEnabled;
378+ property ForceUnicode: Boolean read FForceUnicode write FForceUnicode;
378379 property AllDatabasesStr: String read FAllDatabases write FAllDatabases;
379380 property AllDatabasesList: TStringList read GetAllDatabasesList;
380381 property LibraryOrProvider: String read FLibraryOrProvider write FLibraryOrProvider;
@@ -1405,6 +1406,7 @@ constructor TConnectionParameters.Create;
14051406 FLoginPrompt := AppSettings.GetDefaultBool(asLoginPrompt);
14061407 FWindowsAuth := AppSettings.GetDefaultBool(asWindowsAuth);
14071408 FCleartextPluginEnabled := AppSettings.GetDefaultBool(asCleartextPluginEnabled);
1409+ FForceUnicode := AppSettings.GetDefaultBool(asForceUnicode);
14081410 FUsername := DefaultUsername;
14091411 FPassword := AppSettings.GetDefaultString(asPassword);
14101412 FPort := DefaultPort;
@@ -1479,6 +1481,7 @@ constructor TConnectionParameters.Create(SessionRegPath: String);
14791481 FLoginPrompt := AppSettings.ReadBool(asLoginPrompt);
14801482 FWindowsAuth := AppSettings.ReadBool(asWindowsAuth);
14811483 FCleartextPluginEnabled := AppSettings.ReadBool(asCleartextPluginEnabled);
1484+ FForceUnicode := AppSettings.ReadBool(asForceUnicode);
14821485 FPort := MakeInt(AppSettings.ReadString(asPort));
14831486 FCompressed := AppSettings.ReadBool(asCompressed);
14841487 FAllDatabases := AppSettings.ReadString(asDatabases);
@@ -1555,6 +1558,7 @@ procedure TConnectionParameters.SaveToRegistry;
15551558 AppSettings.WriteString(asHost, FHostname);
15561559 AppSettings.WriteBool(asWindowsAuth, FWindowsAuth);
15571560 AppSettings.WriteBool(asCleartextPluginEnabled, FCleartextPluginEnabled);
1561+ AppSettings.WriteBool(asForceUnicode, FForceUnicode);
15581562 AppSettings.WriteString(asUser, FUsername);
15591563 AppSettings.WriteString(asPassword, encrypt(FPassword));
15601564 AppSettings.WriteBool(asLoginPrompt, FLoginPrompt);
@@ -4611,10 +4615,14 @@ procedure TMySQLConnection.SetCharacterSet(CharsetName: String);
46114615 FStatementNum := 0 ;
46124616 Log(lcInfo, ' Changing character set from ' +CharacterSet+' to ' +CharsetName);
46134617 Return := FLib.mysql_set_character_set(FHandle, PAnsiChar(Utf8Encode(CharsetName)));
4618+ // Return value never seems to be <> 0, not even on v3.23 servers, we check it anyway:
46144619 if Return <> 0 then
4615- raise EDbError.Create(LastErrorMsg)
4616- else
4617- FIsUnicode := CharsetName.StartsWith(' utf' , True);
4620+ raise EDbError.Create(LastErrorMsg);
4621+ // Check opt-out setting: if disabled, align the internal IsUnicode flag to the connection charset
4622+ if not FParameters.ForceUnicode then begin
4623+ FIsUnicode := CharacterSet.StartsWith(' utf' , True);
4624+ Log(lcInfo, ' ForceUnicode disabled in settings. Internal IsUnicode flag is now: ' + FIsUnicode.ToInteger.ToString)
4625+ end ;
46184626end ;
46194627
46204628
0 commit comments