Skip to content

Commit b858cd6

Browse files
committed
feat: create opt-out setting "ForceUnicode", for sessions which shall not force Unicode communication
https://www.heidisql.com/forum.php?t=45113
1 parent a6fa055 commit b858cd6

2 files changed

Lines changed: 14 additions & 5 deletions

File tree

source/apphelpers.pas

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ TWinControlHelper = class helper for TWinControl
188188
asWrapLongLines, asCodeFolding, asDisplayBLOBsAsText, asSingleQueries, asMemoEditorWidth, asMemoEditorHeight, asMemoEditorMaximized,
189189
asMemoEditorWrap, asMemoEditorHighlighter, asMemoEditorAlwaysFormatCode, asDelimiter, asSQLHelpWindowLeft, asSQLHelpWindowTop, asSQLHelpWindowWidth,
190190
asSQLHelpWindowHeight, asSQLHelpPnlLeftWidth, asSQLHelpPnlRightTopHeight, asHost,
191-
asUser, asPassword, asCleartextPluginEnabled, asWindowsAuth, asLoginPrompt, asPort, asLibrary, asAllProviders,
191+
asUser, asPassword, asCleartextPluginEnabled, asForceUnicode, asWindowsAuth, asLoginPrompt, asPort, asLibrary, asAllProviders,
192192
asSSHtunnelActive, asPlinkExecutable, asSshExecutable, asSSHtunnelHost, asSSHtunnelHostPort, asSSHtunnelPort, asSSHtunnelUser,
193193
asSSHtunnelPassword, asSSHtunnelTimeout, asSSHtunnelPrivateKey, asSSLActive, asSSLKey,
194194
asSSLCert, asSSLCA, asSSLCipher, asSSLVerification, asSSLWarnUnused, asNetType, asCompressed, asLocalTimeZone, asQueryTimeout, asKeepAlive,
@@ -3911,6 +3911,7 @@ constructor TAppSettings.Create;
39113911
InitSetting(asUser, 'User', 0, False, '', True);
39123912
InitSetting(asPassword, 'Password', 0, False, '', True);
39133913
InitSetting(asCleartextPluginEnabled, 'CleartextPluginEnabled', 0, False, '', True);
3914+
InitSetting(asForceUnicode, 'ForceUnicode', 0, True, '', True);
39143915
InitSetting(asWindowsAuth, 'WindowsAuth', 0, False, '', True);
39153916
InitSetting(asLoginPrompt, 'LoginPrompt', 0, False, '', True);
39163917
InitSetting(asPort, 'Port', 0, False, '', True);

source/dbconnection.pas

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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;
46184626
end;
46194627

46204628

0 commit comments

Comments
 (0)