diff --git a/mysql-test/main/ctype_utf16.result b/mysql-test/main/ctype_utf16.result index 71c7ee77a1d..5df3dbea274 100644 --- a/mysql-test/main/ctype_utf16.result +++ b/mysql-test/main/ctype_utf16.result @@ -2910,5 +2910,15 @@ CAST(_utf16 0x0061D83DDE0E0062 AS INT) Warnings: Warning 1292 Truncated incorrect INTEGER value: 'a?b' # +# MDEV-23138 Odd behavior of character_set variables set to utf16 (when allowed) +# +SET character_set_connection=utf16; +SET tx_isolation= 'READ-COMMITTED'; +SELECT @@tx_isolation; +@@tx_isolation +READ-COMMITTED +SET tx_isolation=DEFAULT; +SET NAMES utf8mb3; +# # End of 10.5 tests # diff --git a/mysql-test/main/ctype_utf16.test b/mysql-test/main/ctype_utf16.test index 9f23f02b0fa..560b48e88f8 100644 --- a/mysql-test/main/ctype_utf16.test +++ b/mysql-test/main/ctype_utf16.test @@ -1029,6 +1029,15 @@ SET NAMES utf8; # surrogate pairs is replaced to a single question mark. SELECT CAST(_utf16 0x0061D83DDE0E0062 AS INT); +--echo # +--echo # MDEV-23138 Odd behavior of character_set variables set to utf16 (when allowed) +--echo # + +SET character_set_connection=utf16; +SET tx_isolation= 'READ-COMMITTED'; +SELECT @@tx_isolation; +SET tx_isolation=DEFAULT; +SET NAMES utf8mb3; --echo # --echo # End of 10.5 tests diff --git a/sql/sys_vars.inl b/sql/sys_vars.inl index 0c106777a3e..b678bbbd1cf 100644 --- a/sql/sys_vars.inl +++ b/sql/sys_vars.inl @@ -334,7 +334,11 @@ public: if (var->value->result_type() == STRING_RESULT) { - if (!(res=var->value->val_str(&str))) + /* + Convert from the expression character set to ascii. + This is OK, as typelib values cannot have non-ascii characters. + */ + if (!(res= var->value->val_str_ascii(&str))) return true; else if (!(var->save_result.ulonglong_value=