From 30a86a0be9f1fc3dd8836a1524e446a54ba441c6 Mon Sep 17 00:00:00 2001 From: "bar@mysql.com" <> Date: Tue, 6 Jul 2004 17:15:43 +0500 Subject: [PATCH 1/2] Bug#4417 binary character set breaks multi-byte table/field name. --- mysql-test/r/ctype_recoding.result | 25 +++++++++++++++++++++++++ mysql-test/t/ctype_recoding.test | 19 +++++++++++++++++++ sql/sql_class.cc | 14 ++++++++------ 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/mysql-test/r/ctype_recoding.result b/mysql-test/r/ctype_recoding.result index ed59de87395..d40360b9337 100644 --- a/mysql-test/r/ctype_recoding.result +++ b/mysql-test/r/ctype_recoding.result @@ -111,3 +111,28 @@ SET character_set_connection=cp1251; SELECT hex('ิลำิ'); hex('ิลำิ') F2E5F1F2 +USE test; +SET NAMES binary; +CREATE TABLE `ั‚ะตัั‚` (`ั‚ะตัั‚` int); +SHOW CREATE TABLE `ั‚ะตัั‚`; +Table Create Table +ั‚ะตัั‚ CREATE TABLE `ั‚ะตัั‚` ( + `ั‚ะตัั‚` int(11) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +SET NAMES utf8; +SHOW CREATE TABLE `ั‚ะตัั‚`; +Table Create Table +ั‚ะตัั‚ CREATE TABLE `ั‚ะตัั‚` ( + `ั‚ะตัั‚` int(11) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE `ั‚ะตัั‚`; +SET NAMES binary; +SET character_set_connection=utf8; +SELECT 'ั‚ะตัั‚' as s; +s +ั‚ะตัั‚ +SET NAMES utf8; +SET character_set_connection=binary; +SELECT 'ั‚ะตัั‚' as s; +s +ั‚ะตัั‚ diff --git a/mysql-test/t/ctype_recoding.test b/mysql-test/t/ctype_recoding.test index 8ac22e89c2d..45cc0cebfb3 100644 --- a/mysql-test/t/ctype_recoding.test +++ b/mysql-test/t/ctype_recoding.test @@ -78,3 +78,22 @@ SET NAMES koi8r; SELECT hex('ิลำิ'); SET character_set_connection=cp1251; SELECT hex('ิลำิ'); + +USE test; + +# Bug#4417 +# Check that identifiers and strings are not converted +# when the client character set is binary. + +SET NAMES binary; +CREATE TABLE `ั‚ะตัั‚` (`ั‚ะตัั‚` int); +SHOW CREATE TABLE `ั‚ะตัั‚`; +SET NAMES utf8; +SHOW CREATE TABLE `ั‚ะตัั‚`; +DROP TABLE `ั‚ะตัั‚`; +SET NAMES binary; +SET character_set_connection=utf8; +SELECT 'ั‚ะตัั‚' as s; +SET NAMES utf8; +SET character_set_connection=binary; +SELECT 'ั‚ะตัั‚' as s; diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 7aa3bbbdd7b..ad4eb9f6801 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -533,21 +533,23 @@ bool THD::convert_string(String *s, CHARSET_INFO *from_cs, CHARSET_INFO *to_cs) return FALSE; } + /* Update some cache variables when character set changes */ void THD::update_charset() { - charset_is_system_charset= my_charset_same(charset(),system_charset_info); - charset_is_collation_connection= my_charset_same(charset(), - variables. - collation_connection); + uint32 not_used; + charset_is_system_charset= !String::needs_conversion(0,charset(), + system_charset_info, + ¬_used); + charset_is_collation_connection= + !String::needs_conversion(0,charset(),variables.collation_connection, + ¬_used); } - - /* routings to adding tables to list of changed in transaction tables */ inline static void list_include(CHANGED_TABLE_LIST** prev, From 1bc5370cfffa01ac90fb1b1a575b3751fc64ac56 Mon Sep 17 00:00:00 2001 From: "bar@mysql.com" <> Date: Tue, 6 Jul 2004 17:18:04 +0500 Subject: [PATCH 2/2] mysqltest.c: Bug #4338 mysql-test-run fails if compiled with non-latin1 character set. --- client/mysqltest.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/mysqltest.c b/client/mysqltest.c index 5ba4ad7336c..f0d2eb0aded 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -1628,6 +1628,7 @@ int do_connect(struct st_query* q) if (opt_compress) mysql_options(&next_con->mysql,MYSQL_OPT_COMPRESS,NullS); mysql_options(&next_con->mysql, MYSQL_OPT_LOCAL_INFILE, 0); + mysql_options(&next_con->mysql, MYSQL_SET_CHARSET_NAME, "latin1"); #ifdef HAVE_OPENSSL if (opt_use_ssl) @@ -2692,6 +2693,8 @@ int main(int argc, char **argv) if (opt_compress) mysql_options(&cur_con->mysql,MYSQL_OPT_COMPRESS,NullS); mysql_options(&cur_con->mysql, MYSQL_OPT_LOCAL_INFILE, 0); + mysql_options(&cur_con->mysql, MYSQL_SET_CHARSET_NAME, "latin1"); + #ifdef HAVE_OPENSSL if (opt_use_ssl) mysql_ssl_set(&cur_con->mysql, opt_ssl_key, opt_ssl_cert, opt_ssl_ca,