在使用Mysql數(shù)據(jù)庫過程中,有時會遇到字符顯示亂碼問題,下面來看看Mysql數(shù)據(jù)庫有關(guān)字符集方面的問題。
?
在編寫操作Mysql數(shù)據(jù)庫代碼時,有以下幾種方式可以設(shè)置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");
這幾種方式有什么區(qū)別呢?我們先來看看Mysql是如何處理字符集的:
?
先了解Mysql有關(guān)字符的幾個變量:
Character_set_result ?
??----- 服務(wù)端返回給客戶端結(jié)果集采用的字符集。
Character_set_client
??----來自客戶端數(shù)據(jù)采用的字符集。
Character_set_connection
??---服務(wù)端采用此字符集解析來自客戶端的數(shù)據(jù)。
Character_set_database
???????? ---數(shù)據(jù)庫默認的字符集。
?
現(xiàn)在我們來說明幾種設(shè)置Mysql字符集語句的區(qū)別。
1、? mysql_options(pMySql, MYSQL_SET_CHARSET_NAME, "gb2312");
此語句設(shè)置數(shù)據(jù)庫默認字符集。意在說明數(shù)據(jù)庫所有操作采用的字符集都為gb2312。
2、mysql_query(pSQL,"SETNAMES gb2312");
???????? 此語句相等同于以下三條語句:
????????SET?character_set_client?=?gb2312;
??????? SET character_set_results = gb2312;
??????? SET character_set_connection = gb2312;
?此語句表示以后客戶端以送的所有語句都采用gb2312字符集,服務(wù)端按gb2312字符集處理SQL語句并且按gb2312字符集返回結(jié)果集給客戶端。
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設(shè)置為character_set_database。
?
如果想深入了解其中的區(qū)別可以去看看Mysql源碼。推薦使用mysql_options(pMySql, MYSQL_SET_CHARSET_NAME, "gb2312")。
?