Description:
Connection character sets are not set to eucjpms correctly via mysql_options() API function. It changes character_set_client correctly, but character_set_result and character_set_connection are unchanged. The impacted character set is eucjpms only for Japanese character set.
How to repeat:
#include <stdio.h>
#include <strings.h>
#include <mysql.h>
#include <assert.h>
#include <stdlib.h>
int main()
{
MYSQL *dbh;
MYSQL_RES *query_result;
MYSQL_ROW row;
int status;
/* INIT */
dbh = mysql_init(NULL);
status = mysql_options(dbh, MYSQL_SET_CHARSET_NAME, (void*)"eucjpms");
if(status != 0) {
printf("Cannot change the option: %s", mysql_error(dbh));
exit(1);
}
if (!mysql_real_connect(dbh, NULL, "user", "password", "test", 3306, NULL, 0)) {
printf("Cannot connect %s", mysql_error(dbh));
exit(1);
};
char *sql = "SHOW VARIABLES LIKE 'c%'";
mysql_real_query(dbh, sql, strlen(sql));
query_result = mysql_store_result(dbh);
while((row = mysql_fetch_row(query_result))) {
printf("%s\t%s\n", row[0], row[1]);
}
mysql_free_result(query_result);
mysql_close(dbh);
}
You will see the output like below:
character_set_client eucjpms
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/local/mysql-5.1.37/share/mysql/charsets/
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server utf8_general_ci
completion_type 0
concurrent_insert 1
connect_timeout 10
Suggested fix:
nada
Description: Connection character sets are not set to eucjpms correctly via mysql_options() API function. It changes character_set_client correctly, but character_set_result and character_set_connection are unchanged. The impacted character set is eucjpms only for Japanese character set. How to repeat: #include <stdio.h> #include <strings.h> #include <mysql.h> #include <assert.h> #include <stdlib.h> int main() { MYSQL *dbh; MYSQL_RES *query_result; MYSQL_ROW row; int status; /* INIT */ dbh = mysql_init(NULL); status = mysql_options(dbh, MYSQL_SET_CHARSET_NAME, (void*)"eucjpms"); if(status != 0) { printf("Cannot change the option: %s", mysql_error(dbh)); exit(1); } if (!mysql_real_connect(dbh, NULL, "user", "password", "test", 3306, NULL, 0)) { printf("Cannot connect %s", mysql_error(dbh)); exit(1); }; char *sql = "SHOW VARIABLES LIKE 'c%'"; mysql_real_query(dbh, sql, strlen(sql)); query_result = mysql_store_result(dbh); while((row = mysql_fetch_row(query_result))) { printf("%s\t%s\n", row[0], row[1]); } mysql_free_result(query_result); mysql_close(dbh); } You will see the output like below: character_set_client eucjpms character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8 character_set_server utf8 character_set_system utf8 character_sets_dir /usr/local/mysql-5.1.37/share/mysql/charsets/ collation_connection utf8_general_ci collation_database utf8_general_ci collation_server utf8_general_ci completion_type 0 concurrent_insert 1 connect_timeout 10 Suggested fix: nada