Mysql字符集問題

在使用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")。

 

發佈了14 篇原創文章 · 獲贊 13 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章