• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            小默

            【轉】MySQL 中文顯示亂碼

            http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx

            =================

            最近關于中文顯示亂碼的貼子比較多,所以也做了個總結:

            可以參考一下楊濤濤版主的《各種亂碼問題匯總》
            http://topic.csdn.net/u/20071124/08/3b7eae69-ed1d-4a77-8895-9930bf3601af.html

            MySQL字符集的原理介紹。摘錄于官方文檔。http://dev.mysql.com/doc/refman/5.1/zh/charset.html

            不同的編碼格式會導致同一字符,在不同字符集下的編碼會不同。同樣同一編碼在不同的字符集中代碼的字符也不相同。當你的MySQL返回的字符串的編碼格式(字符集)與你的客戶工具程序(mysql, php, query browser, ...)當前使用的字符集不同時,就會造成亂碼。 比如一個英國朋友告訴你Long, 當一位中國小學生看到后就會告訴你“龍”而不是“長”

            關于字符集的詳細介紹和例子,建議花一點時間看一下 
            http://dev.mysql.com/doc/refman/5.1/zh/charset.html  (第10章:字符集支持)。


            這里僅摘要一下。

            MySQL中默認字符集的設置有四級:服務器級,數據庫級,表級 。最終是字段級 的字符集設置。注意前三種均為默認設置,并不代碼你的字段最終會使用這個字符集設置。所以我們建議要用show create table table ; 或show full fields from tableName; 來檢查當前表中字段的字符集設置。

            MySQL中關于連接環境的字符集設置有  Client端,connection, results 通過這些參數,MySQL就知道你的客戶端工具用的是什么字符集,結果集應該是什么字符集。這樣MySQL就會做必要的翻譯,一旦這些參數有誤,自然會導致字符串在轉輸過程中的轉換錯誤。基本上99%的亂碼由些造成。

            亂碼后需要檢查的信息。(如果需要論壇上的朋友幫助,建議你提供以下信息 )


            1. 數據庫表中字段的字符集設置 show create table TableName  show full columns from tableName


            mysql> show create table t1;
            +-------+------------------------------------
            | Table | Create Table                       
            +-------+------------------------------------
            | t1    | CREATE TABLE `t1` (
              `id` int(11) NOT NULL,
              `c1` varchar(30) DEFAULT NULL,
              PRIMARY KEY (`id`)    
            ) ENGINE=InnoDB DEFAULT CHARSET=gbk |
            +-------+------------------------------------
            1 row in set (0.00 sec) 
                                    
            mysql> show full columns from t1;
            +-------+-------------+----------------+------+-----+-
            | Field | Type        | Collation      | Null | Key | 
            +-------+-------------+----------------+------+-----+-
            | id    | int(11)     | NULL           | NO   | PRI | 
            | c1    | varchar(30) | gbk_chinese_ci | YES  |     | 
            +-------+-------------+----------------+------+-----+-
            2 rows in set (0.00 sec)
             

            mysql>

            2. 當前聯接系統參數  show variables like 'char%'


            mysql> show variables like 'char%';
            +--------------------------+----------------
            | Variable_name            | Value
            +--------------------------+----------------
            | character_set_client     | gbk
            | character_set_connection | gbk
            | character_set_database   | latin1
            | character_set_filesystem | binary
            | character_set_results    | gbk
            | character_set_server     | latin1
            | character_set_system     | utf8
            | character_sets_dir       | C:\Program File
            +--------------------------+----------------
            8 rows in set (0.00 sec)
             

            mysql>


            1. 中文,請確保 表中該字段的字符集為中文兼容: 
             big5     | Big5 Traditional Chinese
             gb2312   | GB2312 Simplified Chinese
             gbk      | GBK Simplified Chinese
             utf8     | UTF-8 Unicode

            2. 確保,聯接參數與這個字段字符集一致,你可以用 set name 'charsetname'; 
             比如, set name 'gbk';
             這條命令會同時修改 character_set_client,character_set_connection,character_set_results
             (如果你的這架MySQL中都為中文,則你可以在my.ini或my.cnf中加上或修改這個參數, 參數文件修改后需重啟MySQL服務)
            [mysql]
            default-character-set=gbk

            3. PHP 亂碼, 同樣 mysql_query("set name 'gbk'"); 其它API也類似。

            4. phpmyadmin里亂碼 
            phpMyAdmin的config.inc.php中有沒有設置$cfg['DefaultCharset']='utf-8';

            5. Windows操作系統中命令行("DOS"窗口)下。 
             在你的DOS窗中的左上角標題欄片左鍵,屬性,
             在字體中,選擇“宋體”,確認
             mysql中 set names 'gbk';

            6. ADO.NET, ADO中 ,可以連接字符串中加入CharSet=UTF8;類似指令以說明connection的字符集。
             Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword; CharSet=UTF8;

            7. SQL Manager for MySQL

            用EMS建數據庫,

             Character Set設為utf-8

             client charset設UTF-8

             Font charset 設為GB2312_CHARSET


            8. jdbcodbc橋接 http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/bridge.html

                   // Load the JDBC-ODBC bridge driver 
                   Class.forName(sun.jdbc.odbc.JdbcOdbcDriver) ;

                   
            // setup the properties 
                   java.util.Properties prop = new java.util.Properties();
                   prop.put(
             " charSet " , " Big5 " );
                   prop.put(
             " user " , username);
                   prop.put(
             " password " , password);

                   
            // Connect to the database 
                   con = DriverManager.getConnection(url, prop);

            9.  PHP 5.2 版本以上解決亂碼問題的一個方法 (由 ljf_ljf [Mark Liang] 提供)

                $conn = mysql_connect ( " 192.168.1.133 " , " root " , " 123456 " ) or
                    
            die ( " Could not connect: " . mysql_error ());

                
            $program_char = " utf8 " ;

                
            $conn . mysql_select_db ( " test " );
                
            // $conn.mysql_query('SET @@character_set_results = "'.$program_char.'"'); 
                
                mysql_set_charset(
             $program_char , $conn ); 
                
            $charset = mysql_client_encoding ( $conn );
                
            printf ( " current character set is %s <br> " , $charset );
                
            $result = mysql_query ( " SELECT id, task_no,pack_path FROM tb_workplan where id = 1 " , $conn );
                
            while ( $row = mysql_fetch_array ( $result , MYSQL_BOTH)) {
                    
            printf ( " ID: %s <br> task_no: %s  <br> pack_path :%s <BR> " , $row [ " id " ] , $row [ 1 ] , $row [ " pack_path " ]);  
                }
                
            $conn . mysql_free_result ( $result );
                
            $conn . mysql_close ();

            9.  存儲過程參數亂碼

            create procedure t ( aa char(10) charset 'gbk')

            未完。。。

            ===========

            dida64 發表于Sun May 30 2010 08:34:15 GMT+0800 (China Standard Time)  舉報回復
            樓主真是太棒了, 個人補充一點,如果已經創立了表,還是亂碼,可以嘗試對每個char字段進行進行修改,將字符集從latin1修改為gbk,整理修改為gbk_chinexe_ci。當然,其它步驟還是要參考樓主的文章進行檢查
            rj03hou 發表于Thu Jun 17 2010 11:09:40 GMT+0800 (China Standard Time)  舉報回復
             我上次使用python的包MySQLdb連接mysql的時候,在MySQLdb.connect的時候沒有指定charset導致從數據庫讀取數據之后是亂碼,后來指定了就ok了。

            posted on 2010-08-21 22:41 小默 閱讀(1557) 評論(0)  編輯 收藏 引用 所屬分類: Database

            導航

            統計

            留言簿(13)

            隨筆分類(287)

            隨筆檔案(289)

            漏洞

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            热久久最新网站获取| 久久综合给合综合久久| 久久久久人妻精品一区| 国内精品久久久人妻中文字幕| 久久综合久久久| 综合久久精品色| 久久久久久免费一区二区三区| 亚洲国产成人精品91久久久 | 中文字幕日本人妻久久久免费| 五月丁香综合激情六月久久| 国产精品美女久久久久AV福利| 午夜精品久久久久久久无码| 国内精品人妻无码久久久影院| 欧美精品丝袜久久久中文字幕| 色欲久久久天天天综合网| 久久99热这里只有精品国产| 久久天天躁狠狠躁夜夜网站| 香蕉久久影院| 久久亚洲精品无码播放| 婷婷综合久久狠狠色99h| 亚洲AV无码久久寂寞少妇| 久久综合九色欧美综合狠狠| 亚洲精品高清久久| 精品永久久福利一区二区 | 久久国产精品偷99| 精品久久久久久久无码| 久久综合九色综合网站| 亚洲а∨天堂久久精品| 无码任你躁久久久久久久| 99久久国产综合精品成人影院| 狼狼综合久久久久综合网| 国内精品人妻无码久久久影院导航 | 中文字幕无码精品亚洲资源网久久| 久久综合九色综合久99| 九九久久99综合一区二区| 国产情侣久久久久aⅴ免费| 久久久久亚洲AV片无码下载蜜桃| 伊人久久综合无码成人网| 久久久久久精品成人免费图片| 久久只有这精品99| 成人午夜精品无码区久久|