Linux下,當我們用mysql c api 去操作mysqldb的時候,默認情況下,程序會以Latin1這種字符集去進行sql操作,這種情況,很可能就會出現亂碼,
比如,數據庫設置的字符集是utf8, 然後我們通過程序向其中插入一條記錄,然後我們去查詢的時候,就會出現亂碼。
為了解決這個問題,我們可以調用 int mysql_set_character_set(MYSQL *mysql, const char *csname) 這個函數,去對每一個到mysql的連接設置對應字符集,就可以解決亂碼問題。例如下代碼:
MYSQL mysql;
mysql_init(&mysql);
if
(!mysql_real_connect(&mysql,
"host"
,
"user"
,
"passwd"
,
"database"
,0,NULL,0))
{
fprintf
(stderr,
"Failed to connect to database: Error: %s\n"
,
mysql_error(&mysql));
}
if
(!mysql_set_character_set(&mysql,
"utf8"
))
{
printf
(
"New client character set: %s\n"
,
mysql_character_set_name(&mysql));
}
有時候,當我們直接在mysql客戶端去進行sql操作的時候,為了解決亂碼問題,一般在執行一條sql語句之前,都會執行:set names ***,
這個函數mysql_set_character_set() 跟set names *** 這條語句的作用是一樣的。