summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/partition_charset.result18
-rw-r--r--mysql-test/t/partition_charset.test21
-rw-r--r--sql/sql_partition.cc3
3 files changed, 42 insertions, 0 deletions
diff --git a/mysql-test/r/partition_charset.result b/mysql-test/r/partition_charset.result
new file mode 100644
index 00000000000..665e5d55f8f
--- /dev/null
+++ b/mysql-test/r/partition_charset.result
@@ -0,0 +1,18 @@
+drop table if exists t1;
+set names utf8;
+create table t1 (s1 int)
+partition by list (s1)
+(partition c values in (1),
+partition Ç values in (3));
+insert into t1 values (1),(3);
+select * from t1;
+s1
+1
+3
+flush tables;
+set names latin1;
+select * from t1;
+s1
+1
+3
+drop table t1;
diff --git a/mysql-test/t/partition_charset.test b/mysql-test/t/partition_charset.test
new file mode 100644
index 00000000000..27d0dc87b89
--- /dev/null
+++ b/mysql-test/t/partition_charset.test
@@ -0,0 +1,21 @@
+#
+# Test for character set related things in combination
+# with the partition storage engine
+#
+-- source include/have_partition.inc
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+set names utf8;
+create table t1 (s1 int)
+ partition by list (s1)
+ (partition c values in (1),
+ partition Ç values in (3));
+insert into t1 values (1),(3);
+select * from t1;
+flush tables;
+set names latin1;
+select * from t1;
+drop table t1;
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index 056db71c63b..c98f8f915b9 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -3630,11 +3630,13 @@ bool mysql_unpack_partition(THD *thd, const uchar *part_buf,
Item *thd_free_list= thd->free_list;
bool result= TRUE;
partition_info *part_info;
+ CHARSET_INFO *old_character_set_client= thd->variables.character_set_client;
LEX *old_lex= thd->lex;
LEX lex;
DBUG_ENTER("mysql_unpack_partition");
thd->lex= &lex;
+ thd->variables.character_set_client= system_charset_info;
lex_start(thd, part_buf, part_info_len);
/*
We need to use the current SELECT_LEX since I need to keep the
@@ -3760,6 +3762,7 @@ bool mysql_unpack_partition(THD *thd, const uchar *part_buf,
end:
thd->free_list= thd_free_list;
thd->lex= old_lex;
+ thd->variables.character_set_client= old_character_set_client;
DBUG_RETURN(result);
}