summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extra/Makefile.am2
-rw-r--r--sql/mysql_priv.h1
-rw-r--r--sql/mysqld.cc7
-rw-r--r--sql/sql_parse.cc4
4 files changed, 12 insertions, 2 deletions
diff --git a/extra/Makefile.am b/extra/Makefile.am
index 457fddce673..9fac05d0160 100644
--- a/extra/Makefile.am
+++ b/extra/Makefile.am
@@ -38,7 +38,7 @@ $(top_builddir)/include/mysqld_ername.h: $(top_builddir)/include/mysqld_error.h
$(top_builddir)/include/sql_state.h: $(top_builddir)/include/mysqld_error.h
bin_PROGRAMS = replace comp_err perror resolveip my_print_defaults \
- resolve_stack_dump mysql_waitpid innochecksum
+ resolve_stack_dump mysql_waitpid # innochecksum
noinst_PROGRAMS = charset2html
# Don't update the files from bitkeeper
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index 587df885ef6..3430bd77e0f 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -1147,6 +1147,7 @@ extern bool opt_using_transactions, mysqld_embedded;
extern bool using_update_log, opt_large_files, server_id_supplied;
extern bool opt_log, opt_update_log, opt_bin_log, opt_slow_log, opt_error_log;
extern bool opt_disable_networking, opt_skip_show_db;
+extern bool opt_character_set_client_handshake;
extern bool volatile abort_loop, shutdown_in_progress, grant_option;
extern bool mysql_proc_table_exists;
extern uint volatile thread_count, thread_running, global_read_lock;
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index a3cc3d2916b..76ee08d73a3 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -338,6 +338,7 @@ static my_bool opt_sync_bdb_logs;
bool opt_log, opt_update_log, opt_bin_log, opt_slow_log;
bool opt_error_log= IF_WIN(1,0);
bool opt_disable_networking=0, opt_skip_show_db=0;
+bool opt_character_set_client_handshake= 1;
bool server_id_supplied = 0;
bool opt_endinfo,using_udf_functions, locked_in_memory;
bool opt_using_transactions, using_update_log;
@@ -4410,6 +4411,7 @@ enum options_mysqld
OPT_EXPIRE_LOGS_DAYS,
OPT_GROUP_CONCAT_MAX_LEN,
OPT_DEFAULT_COLLATION,
+ OPT_CHARACTER_SET_CLIENT_HANDSHAKE,
OPT_INIT_CONNECT,
OPT_INIT_SLAVE,
OPT_SECURE_AUTH,
@@ -4511,6 +4513,11 @@ Disable with --skip-bdb (will save memory).",
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"bootstrap", OPT_BOOTSTRAP, "Used by mysql installation scripts.", 0, 0, 0,
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
+ {"character-set-client-handshake", OPT_CHARACTER_SET_CLIENT_HANDSHAKE,
+ "Don't use client side character set value sent during handshake.",
+ (gptr*) &opt_character_set_client_handshake,
+ (gptr*) &opt_character_set_client_handshake,
+ 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
{"character-set-server", 'C', "Set the default character set.",
(gptr*) &default_character_set_name, (gptr*) &default_character_set_name,
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 9a93e8395f1..e3f9c0dc148 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -875,11 +875,13 @@ static int check_connection(THD *thd)
DBUG_PRINT("info", ("client_character_set: %d", (uint) net->read_pos[8]));
/*
Use server character set and collation if
+ - opt_character_set_client_handshake is not set
- client has not specified a character set
- client character set is the same as the servers
- client character set doesn't exists in server
*/
- if (!(thd->variables.character_set_client=
+ if (!opt_character_set_client_handshake ||
+ !(thd->variables.character_set_client=
get_charset((uint) net->read_pos[8], MYF(0))) ||
!my_strcasecmp(&my_charset_latin1,
global_system_variables.character_set_client->name,