Linux下,當我們用mysql c api 去操作mysqldb的時候,預設情況下,程式會以Latin1這種字元集去進行sql操作,這種情況,很可能就會出現亂碼, 比如,資料庫設置的字元集是utf8, 然後我們通過程式向其中插入一條記錄,然後我們去查詢的時候,就會出現亂碼。 為瞭解決這個問題,我們
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 *** 這條語句的作用是一樣的。