• <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>

            woaidongmao

            文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數據加載中……

            在Java中解決MySQL5.0中文字符集問題全程詳細記錄

                 今天被MySQL的中文字符集問題弄得焦頭爛額,最終還是解決了.下面分享一下解決過程。
            在網上搜索了很多,網友也有很多精彩的帖子,
            但是每個人的情況不總是一樣,所以我覺得我下面的文字有存在的必要。
            裝了MySQL5.0后,系統默認的字符集似乎是UTF8,但是不知道為什么就是不支持中文。
            下面的是我的痛苦的解決過程。
            將數據庫用character set 和 collate指定字符集為gbk,
            mysql> create database test2  DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
            Query OK, 1 row affected (0.00 sec)
            mysql> create table a(a text);
            Query OK, 0 rows affected (0.14 sec)
            插入的時候也用_gbk指定字符集,
            mysql> insert a values(_gbk'默認數據庫的字符集和');
            Query OK, 1 row affected (0.05 sec)
            但是查詢的時候還是出現亂。
            mysql> select * from a;
            +--------------------------------+
            | a                              |
            +--------------------------------+
            | 榛樿鏁版嵁搴撶殑瀛楃闆嗗拰           |
            +--------------------------------+
            1 row in set (0.00 sec)
            mysql>
            好的,那么是不是創建表也要指定字符集呢?
            我們繼續測試:
            mysql> create table b(a text) DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
            Query OK, 0 rows affected (0.06 sec)
            mysql> insert b values(_gbk'默認數據庫的字符集和');
            Query OK, 1 row affected (0.01 sec)
            mysql> select * from b;
            +--------------------------------+
            | a                              |
            +--------------------------------+
            | 榛樿鏁版嵁搴撶殑瀛楃闆嗗拰           |
            +--------------------------------+
            1 row in set (0.00 sec)
            mysql>
            同樣出現亂碼?
            我們不用_gbk指定字符集呢?
            mysql> insert b values('默認數據庫的字符集和');
            ERROR 1406 (22001): Data too long for column 'a' at row 1
            mysql> insert a values('默認數據庫的字符集和');
            ERROR 1406 (22001): Data too long for column 'a' at row 1
            這樣發現根本就插入不進數據。
            那么到底該怎么解決呢?
            運行下面的這幾行命令,就能看到正常的中文了:
            mysql> SET character_set_connection = gbk;
            Query OK, 0 rows affected (0.00 sec)
            mysql> SET character_set_database = gbk;
            Query OK, 0 rows affected (0.00 sec)
            mysql> SET character_set_results = gbk;
            Query OK, 0 rows affected (0.00 sec)
            mysql> SET character_set_server = gbk;
            Query OK, 0 rows affected (0.00 sec)
            mysql>
            mysql> SET collation_connection = gbk_bin;
            Query OK, 0 rows affected (0.00 sec)
            mysql> SET collation_database = gbk_bin;
            Query OK, 0 rows affected (0.00 sec)
            mysql> SET collation_server = gbk_bin;
            Query OK, 0 rows affected (0.00 sec)
            mysql>
            mysql> select * from a;
            +----------------------+
            | a                    |
            +----------------------+
            | 默認數據庫的字符集和                  |
            +----------------------+
            1 row in set (0.00 sec)
            mysql> select * from b;
            +----------------------+
            | a                    |
            +----------------------+
            | 默認數據庫的字符集和                  |
            +----------------------+
            1 row in set (0.00 sec)
            mysql>
            這樣設置之后,也可以正常插入中文了:
            mysql> insert into a values('當然是聯系 java ');
            Query OK, 1 row affected (0.02 sec)
            mysql> select * from a;
            +----------------------+
            | a                    |
            +----------------------+
            | 默認數據庫的字符集和                  |
            | 當然是聯系 java              |
            +----------------------+
            2 rows in set (0.00 sec)
            mysql>
            但是如果重啟數據庫客戶端,那么還是不能正確顯示中文,
            最徹底的方法就是更改MySQL的配置文件。
            在MySQL5.0的安裝目錄找到my.ini文件,將其中以下兩行:
            default-character-set=utf8
            default-character-set=utf8
            改為:
            default-character-set=gbk
            default-character-set=gbk
            重啟MySQL服務器。
            重新連接:
            mysql> select * from a;
            +----------------------+
            | a                    |
            +----------------------+
            | 默認數據庫的字符集和 |
            | 當然是聯系 java      |
            +----------------------+
            2 rows in set (0.02 sec)
            現在好了,可以直接讀取中文字符了。
            看看插入中文字符情況:
            mysql> insert b values('看看插入中文字符情況:');
            mysql> insert b values('看看插入中文字符情況:');
            Query OK, 1 row affected (0.03 sec)
            mysql> select * from b;
            +------------------------+
            | a                      |
            +------------------------+
            | 默認數據庫的字符集和   |
            | 看看插入中文字符情況: |
            +------------------------+
            2 rows in set (0.00 sec)
            mysql>
            下面再看看創建表的情況:
            mysql> create table c(a text);
            Query OK, 0 rows affected (0.06 sec)
            mysql> insert into c values();
            Query OK, 1 row affected (0.01 sec)
            mysql> insert into c values('下面再看看創建表的情況:');
            Query OK, 1 row affected (0.02 sec)
            mysql> select * from c;
            +--------------------------+
            | a                        |
            +--------------------------+
            | NULL                     |
            | 下面再看看創建表的情況: |
            +--------------------------+
            2 rows in set (0.00 sec)
            mysql>
            一切正常了。
            下面看看程序中的情況:
             

            package test;
            /**
            * 該程序用來測試JDBC和MySQL連接,然后插入中文字符到數據庫中。
            * 其中用到的表為:
            * CREATE TABLE MessageBoard (
            * ID int(10) unsigned NOT NULL default '0',
            * title varchar(255) NOT NULL default '',
            * content text NOT NULL,
            * author varchar(20) NOT NULL default '',
            * time datetime NOT NULL default '0000-00-00 00:00:00',
            * modifyTime datetime NOT NULL default '0000-00-00 00:00:00',
            * PRIMARY KEY (ID)
            * ) ;
            *
            */

            import java.sql.*;
            public class InsertChineseCharacterJDBC
            {
             static
             {
              try
              {
               //驅動和odbc不同

               Class.forName ( "org.gjt.mm.mysql.Driver" );
               System.out.println ( "success loading mysql Driver...." );
              } catch ( Exception e )
              {
               System.out.println ( "Error loading mysql Driver....." );
               e.printStackTrace ( );
              }
             }
             /**
              * @param args
              */

             public static void main ( String agrs[] )
             {
              try
              {
               //連接參數與Access不同

               String url = "jdbc:mysql://localhost/BohaoDB";
               //建立連接

               Connection con = DriverManager.getConnection ( url, "root", "011124" );
               //建立發送SQL命令的Statement對象

               Statement stmt = con.createStatement ( );
               //返回查詢結果

               int flag = stmt.executeUpdate ( "insert into MessageBoard(ID,title,content,author,time,modifyTime) values(1,'大家好!','我是新來,請多多關照!','zieckey','2007-01-28 20:03:50','2007-01-27 20:03:50');" );
               if ( 1==flag )
               {
                System.out.println ("插入中文字符到數據庫成功!");
               }else {
                System.out.println ("插入中文字符到數據庫失敗!");
               }
               ResultSet rs = stmt.executeQuery ( "select * from MessageBoard" );

               /**
                * 取出列屬性!
                */

               ResultSetMetaData md = rs.getMetaData ( );
               int col = md.getColumnCount ( );
               for ( int i = 1; i <= col; i++ )
               {
                System.out.println ( md.getColumnName ( i ) + "\t" );
               }
               /**
                * 取出列值!
                */

               while ( rs.next ( ) )
               {
                String strData = "";
                for ( int i = 1; i <= col; i++ )
                {
                 strData = strData + rs.getString ( i ) + "\t";
                }
                System.out.println ( strData );
               }
               //斷開Connection連接

               rs.close();
               stmt.close();
               con.close ( );
              } catch ( SQLException e )
              {
               e.printStackTrace ( );
              }
             }
            }

            運行輸出:
            success loading mysql Driver....
            插入中文字符到數據庫成功!
            ID
            title
            content
            author
            time
            modifyTime
            1 大家好! 我是新來,請多多關照! zieckey 2007-01-28 20:03:50.0 2007-01-27 20:03:50.0

            posted on 2009-06-23 13:22 肥仔 閱讀(545) 評論(0)  編輯 收藏 引用 所屬分類: Web-后臺

            久久久国产精品福利免费| 色综合久久无码中文字幕| 亚洲国产另类久久久精品| 色婷婷噜噜久久国产精品12p| 久久久久久免费一区二区三区| 国产亚洲精品美女久久久| 久久亚洲AV成人无码国产| 四虎国产精品成人免费久久| 久久亚洲中文字幕精品一区四| 国产精品亚洲综合专区片高清久久久| 免费国产99久久久香蕉| 免费观看久久精彩视频| 国产精品狼人久久久久影院| 久久久久免费视频| 久久这里的只有是精品23| 97精品依人久久久大香线蕉97| 一本色综合网久久| 久久国产精品久久久| 777久久精品一区二区三区无码| 精品国产婷婷久久久| 欧美日韩精品久久久久| 久久综合香蕉国产蜜臀AV| 国产精品久久久久一区二区三区| 久久九九免费高清视频| 久久伊人五月丁香狠狠色| 国产成人久久精品一区二区三区| 久久九九全国免费| 精品综合久久久久久97| 精品久久久久久国产潘金莲| 日本精品一区二区久久久 | 国内精品久久久久久久久电影网 | 午夜精品久久久久成人| 99精品国产99久久久久久97| 国产精品毛片久久久久久久| 色综合久久中文字幕综合网| 久久精品无码午夜福利理论片| 久久天堂电影网| 热re99久久精品国99热| 久久精品无码专区免费| 国产欧美久久久精品| 久久精品国产清自在天天线|