From 1793ad0750c88281e4d32efd51cb07ec00571c8f Mon Sep 17 00:00:00 2001 From: nasseeder1 Date: Tue, 14 Feb 2023 20:13:24 +0000 Subject: [PATCH] 93_DbLog: contrib 5.8.1 git-svn-id: https://svn.fhem.de/fhem/trunk@27228 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/contrib/DS_Starter/93_DbLog.pm | 46 ++++++++++++++--------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/fhem/contrib/DS_Starter/93_DbLog.pm b/fhem/contrib/DS_Starter/93_DbLog.pm index e71f9bfd1..eec129a45 100644 --- a/fhem/contrib/DS_Starter/93_DbLog.pm +++ b/fhem/contrib/DS_Starter/93_DbLog.pm @@ -2602,7 +2602,28 @@ sub _DbLog_SBP_connectDB { if($utf8) { if($model eq "MYSQL") { - $dbh->{mysql_enable_utf8} = 1; + $dbh->{mysql_enable_utf8} = 1; + + ($err, my @se) = _DbLog_prepExecQueryOnly ($name, $dbh, "SHOW VARIABLES LIKE 'collation_database'"); + return ($err, q{}) if($err); + + my $dbcharset = @se ? $se[1] : 'noresult'; + + _DbLog_SBP_Log3Parent ( { name => $name, + level => 4, + msg => qq(Database Character set is >$dbcharset<), + oper => 'log3parent', + subprocess => $subprocess + } + ); + + if ($dbcharset !~ /noresult|ucs2|utf16|utf32/ixs) { # Impermissible Client Character Sets -> https://dev.mysql.com/doc/refman/8.0/en/charset-connection.html + my $collation = $dbcharset; + $dbcharset = (split '_', $collation, 2)[0]; + + ($err, undef) = _DbLog_SBP_dbhDo ($name, $dbh, qq(set names "$dbcharset" collate "$collation"), $subprocess); # set names utf8 collate utf8_general_ci + return ($err, q{}) if($err); + } } if($model eq "SQLITE") { @@ -2610,29 +2631,6 @@ sub _DbLog_SBP_connectDB { return ($err, q{}) if($err); } } - - if ($model eq "MYSQL") { - ($err, my @se) = _DbLog_prepExecQueryOnly ($name, $dbh, "SHOW VARIABLES LIKE 'collation_database'"); - return ($err, q{}) if($err); - - my $dbcharset = @se ? $se[1] : 'noresult'; - - _DbLog_SBP_Log3Parent ( { name => $name, - level => 4, - msg => qq(Database Character set is >$dbcharset<), - oper => 'log3parent', - subprocess => $subprocess - } - ); - - if ($dbcharset !~ /noresult|ucs2|utf16|utf32/ixs) { # Impermissible Client Character Sets -> https://dev.mysql.com/doc/refman/8.0/en/charset-connection.html - my $collation = $dbcharset; - $dbcharset = (split '_', $collation, 2)[0]; - - ($err, undef) = _DbLog_SBP_dbhDo ($name, $dbh, qq(set names "$dbcharset" collate "$collation"), $subprocess); # set names utf8 collate utf8_general_ci - return ($err, q{}) if($err); - } - } if ($model eq 'SQLITE') { my @dos = ("PRAGMA temp_store=MEMORY",