From 1427e1db99ac44dedbc78e8655742a8ed9bfd755 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Mon, 1 Sep 2014 20:57:32 +0400 Subject: MDEV-6661 PI() does not work well in UCS2/UTF16/UTF32 context MDEV-6666 Malformed result for CONCAT(utf8_column, binary_string) Item_static_string_func::safe_charset_converter() and Item_hex_string::safe_charset_converter() did not handle character sets with mbminlen>1 properly, as well as did not handle conversion from binary to multi-byte well. Introducing Item::const_charset_converter(), to reuse it in a number of Item_*::safe_charset_converter(). --- sql/sql_get_diagnostics.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'sql/sql_get_diagnostics.cc') diff --git a/sql/sql_get_diagnostics.cc b/sql/sql_get_diagnostics.cc index be1e3589cc6..8b0d86aa7d1 100644 --- a/sql/sql_get_diagnostics.cc +++ b/sql/sql_get_diagnostics.cc @@ -267,9 +267,11 @@ Condition_information_item::make_utf8_string_item(THD *thd, const String *str) CHARSET_INFO *to_cs= &my_charset_utf8_general_ci; /* If a charset was not set, assume that no conversion is needed. */ CHARSET_INFO *from_cs= str->charset() ? str->charset() : to_cs; - Item_string *item= new Item_string(str->ptr(), str->length(), from_cs); + String tmp(str->ptr(), str->length(), from_cs); /* If necessary, convert the string (ignoring errors), then copy it over. */ - return item ? item->charset_converter(to_cs, false) : NULL; + uint conv_errors; + return new Item_string(&tmp, to_cs, &conv_errors, + DERIVATION_COERCIBLE, MY_REPERTOIRE_UNICODE30); } -- cgit v1.2.1