diff options
-rw-r--r-- | mysql-test/r/ctype_latin1_de.result | 2 | ||||
-rw-r--r-- | mysql-test/t/ctype_latin1_de.test | 3 | ||||
-rw-r--r-- | sql-common/client.c | 63 |
3 files changed, 30 insertions, 38 deletions
diff --git a/mysql-test/r/ctype_latin1_de.result b/mysql-test/r/ctype_latin1_de.result index 7f150cb0698..c500019042f 100644 --- a/mysql-test/r/ctype_latin1_de.result +++ b/mysql-test/r/ctype_latin1_de.result @@ -1,3 +1,5 @@ +set names latin1; +set @@collation_connection=latin1_german2_ci; select @@collation_connection; @@collation_connection latin1_german2_ci diff --git a/mysql-test/t/ctype_latin1_de.test b/mysql-test/t/ctype_latin1_de.test index a5d0c29baf6..e29e43496af 100644 --- a/mysql-test/t/ctype_latin1_de.test +++ b/mysql-test/t/ctype_latin1_de.test @@ -2,6 +2,9 @@ # Test latin_de character set # +set names latin1; +set @@collation_connection=latin1_german2_ci; + select @@collation_connection; --disable_warnings diff --git a/sql-common/client.c b/sql-common/client.c index 08b39d2ca58..1c58bd04d0e 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -1429,14 +1429,13 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user, const char *passwd, const char *db, uint port, const char *unix_socket,ulong client_flag) { - char buff[NAME_LEN+USERNAME_LENGTH+100],charset_name_buff[16]; - char *end,*host_info,*charset_name; + char buff[NAME_LEN+USERNAME_LENGTH+100]; + char *end,*host_info; my_socket sock; in_addr_t ip_addr; struct sockaddr_in sock_addr; ulong pkt_length; NET *net= &mysql->net; - uint charset_number; #ifdef MYSQL_SERVER thr_alarm_t alarmed; ALARM alarm_buff; @@ -1762,10 +1761,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user, goto error; } - charset_number= mysql->server_language; - /* Set character set */ - if ((charset_name=mysql->options.charset_name)) + if (mysql->options.charset_name) { const char *save= charsets_dir; if (mysql->options.charset_dir) @@ -1773,44 +1770,34 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user, mysql->charset=get_charset_by_csname(mysql->options.charset_name, MY_CS_PRIMARY, MYF(MY_WME)); - charset_number= mysql->charset ? mysql->charset->number : 0; charsets_dir= save; - } - else if (mysql->server_language) - { - charset_name=charset_name_buff; - /* Save name in case of errors */ - int10_to_str(mysql->server_language, charset_name, 10); - if (!(mysql->charset = - get_charset((uint8) mysql->server_language, MYF(0)))) - mysql->charset = default_charset_info; /* shouldn't be fatal */ - } - else - { - mysql->charset= default_charset_info; - charset_number= mysql->charset->number; - } - if (!mysql->charset) - { - net->last_errno=CR_CANT_READ_CHARSET; - strmov(net->sqlstate, unknown_sqlstate); - if (mysql->options.charset_dir) - my_snprintf(net->last_error, sizeof(net->last_error)-1, - ER(net->last_errno), - charset_name ? charset_name : "unknown", - mysql->options.charset_dir); - else + if (!mysql->charset) { - char cs_dir_name[FN_REFLEN]; - get_charsets_dir(cs_dir_name); - my_snprintf(net->last_error, sizeof(net->last_error)-1, + net->last_errno=CR_CANT_READ_CHARSET; + strmov(net->sqlstate, unknown_sqlstate); + if (mysql->options.charset_dir) + my_snprintf(net->last_error, sizeof(net->last_error)-1, + ER(net->last_errno), + mysql->options.charset_name, + mysql->options.charset_dir); + else + { + char cs_dir_name[FN_REFLEN]; + get_charsets_dir(cs_dir_name); + my_snprintf(net->last_error, sizeof(net->last_error)-1, ER(net->last_errno), - charset_name ? charset_name : "unknown", + mysql->options.charset_name, cs_dir_name); + } + goto error; } - goto error; } + else + { + mysql->charset= default_charset_info; + } + /* Save connection information */ if (!my_multi_malloc(MYF(0), @@ -1870,7 +1857,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user, /* 4.1 server and 4.1 client has a 32 byte option flag */ int4store(buff,client_flag); int4store(buff+4, net->max_packet_size); - buff[8]= (char) charset_number; + buff[8]= (char) mysql->charset->number; bzero(buff+9, 32-9); end= buff+32; } |