在庫中建表時語句為: create table tbname(..........)engine=MyISAM character set gbk collate gbk_chinese_ci;


          程序中連接數據庫的Connection對象需要寫成Connection con = DriverManaager.getConnection("jdbc:mysql://...user=..&password=...&useUnicode=true&characterEncoding=gbk");
          若在終端下用mysql命令向數據庫插入數據,則在進入mysql時的命令寫成:#mysql --default-character-set=gbk -u ... -p

          在網上看過很多解決mysql亂碼的帖子,可是寫的不是羅里羅嗦就過于復雜。其實亂碼沒那么復雜,是網上的大俠們想多了。我研究過一段日子,總結出一套自己的解決方案,如果你還沒解決亂碼就用我的方法試一下。我的方案不是最好的,卻是最簡單易懂的。不信你試試。

          在使用MYSQL時,插入中文字符,經常會出現亂碼,中文全被用?代替。出現這種情況的原因,多是字符集不匹配造成的。
          在MYSQL中,如果使用缺省的字符集,在建庫、建表時,默認使用的是latin1字符集,為ISO 8859-1西歐字符集。插入中文字符時,與之不匹配,就會出現亂碼。

          要解決此問題,就必須手動將數據庫Server和Client的字符編碼改為gb2312。配置方法如下:
          打開MYSQL安裝目錄下的my.ini文件,找到如下段落:

          # CLIENT SECTION
          # ----------------------------------------------------------------------
          #
          # The following options will be read by MySQL client applications.
          # Note that only client applications shipped by MySQL are guaranteed
          # to read this section. If you want your own MySQL client program to
          # honor these values, you need to specify it as an option during the
          # MySQL client library initialization.
          #
          [client]

          port=3306

          [mysql]

          default-character-set=latin1


          # SERVER SECTION
          # ----------------------------------------------------------------------
          #
          # The following options will be read by the MySQL Server. Make sure that
          # you have installed the server correctly (see above) so it reads this
          # file.
          #
          [mysqld]

          # The TCP/IP Port the MySQL Server will listen on
          port=3306

          #Path to installation directory. All paths are usually resolved relative to this.
          basedir="D:/MySQL/MySQL Server 5.0/"

          #Path to the database root
          datadir="D:/MySQL/MySQL Server 5.0/Data/"

          # The default character set that will be used when a new schema or table is
          # created and no character set is defined
          default-character-set=latin1

          將其中的default-character-set=latin1改為default-character-set=gb2312( 兩個都改),然后重啟MYSQL(特別注意:以前建立的數據庫要重建,因為以前存儲的數據編碼方式為ISO-8859-1),運行MySQL Command Line Client:
          輸入show variables like 'character_set_%';可以查看數據庫的字符編碼如下:

          mysql> show variables like 'character_set_%';
          +--------------------------+-----------------------------------------+
          | Variable_name             | Value                                     |
          +--------------------------+-----------------------------------------+
          | character_set_client      | gb2312                                   |
          | character_set_connection | gb2312                                |
          | character_set_database    | gb2312                                |
          | character_set_filesystem | binary                                   |
          | character_set_results     | gb2312                                   |
          | character_set_server      | gb2312                                  |
          | character_set_system      | utf8                                     |
          | character_sets_dir        | D:\MySQL\MySQL Server 5.0\share\charsets|
          +--------------------------+-----------------------------------------+

          然后,在程序中將連接數據庫的URL改為jdbc:mysql://localhost:3306/databasename?useUnicode=true&characterEncoding=gb2312   就可以了!(&是代表xml中的&)

          還需要注意到是:1.你的JSP頁面一定別忘了加上編碼方式<%@ page pageEncoding="GB2312"%>。

          2.把以前寫過濾方法如:getbytes(iso-8859-1)全去掉

          最后記住,一定要重新導入或建立數據庫!!!

          posted on 2009-01-20 07:19 天長 閱讀(142) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
           
          主站蜘蛛池模板: 莆田市| 安吉县| 浏阳市| 哈尔滨市| 罗平县| 巴中市| 福泉市| 赤水市| 新兴县| 雷州市| 平果县| 额济纳旗| 明星| 阳春市| 九龙城区| 宜州市| 太保市| 灌阳县| 和田市| 永顺县| 安康市| 侯马市| 荣成市| 会理县| 仁怀市| 沙雅县| 抚宁县| 如皋市| 莱州市| 固镇县| 古田县| 嵊泗县| 宜丰县| 新建县| 淮南市| 武山县| 玉树县| 宁阳县| 汾阳市| 三穗县| 饶河县|