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 *** 這條語句的作用是一樣的。
