在使用Mysql數據庫過程中,有時會遇到字符顯示亂碼問題,下面來看看Mysql數據庫有關字符集方面的問題。
在編寫操作Mysql數據庫代碼時,有以下幾種方式可以設置Mysql字符集:
1、 mysql_options(pMySql, MYSQL_SET_CHARSET_NAME, "gb2312");
2、 mysql_query(pSQL,"SET CHARACTER SET gb2312");
3、 mysql_query(pSQL,"SET NAMES gb2312");
這幾種方式有什麼區別呢?我們先來看看Mysql是如何處理字符集的:
先了解Mysql有關字符的幾個變量:
Character_set_result
----- 服務端返回給客戶端結果集採用的字符集。
Character_set_client
----來自客戶端數據採用的字符集。
Character_set_connection
---服務端採用此字符集解析來自客戶端的數據。
Character_set_database
---數據庫默認的字符集。
現在我們來說明幾種設置Mysql字符集語句的區別。
1、 mysql_options(pMySql, MYSQL_SET_CHARSET_NAME, "gb2312");
此語句設置數據庫默認字符集。意在說明數據庫所有操作採用的字符集都爲gb2312。
2、mysql_query(pSQL,"SETNAMES gb2312");
此語句相等同於以下三條語句:
SET character_set_client = gb2312;
SET character_set_results = gb2312;
SET character_set_connection = gb2312;
此語句表示以後客戶端以送的所有語句都採用gb2312字符集,服務端按gb2312字符集處理SQL語句並且按gb2312字符集返回結果集給客戶端。
3、mysql_query(pSQL,"SETCHARACTER SET gb2312");
此語句等同於以下三條語句:
SET character_set_client = charset_name
;
SET character_set_results = charset_name
;
SET collation_connection = @@collation_database;
這裏忽略collation_connection變量,此語句與SET NAMES相似,但是它將character_set_connection設置爲character_set_database。
如果想深入瞭解其中的區別可以去看看Mysql源碼。推薦使用mysql_options(pMySql, MYSQL_SET_CHARSET_NAME, "gb2312")。