JSP讀出MYSQL資料庫時的亂碼問題解決方案

2021-04-12 13:44:42 字數 4468 閱讀 5509

問題:

mysql在命令列終端下中文顯示正常,但在jsp呼叫顯出亂碼!

用jsp查詢顯示亂碼,用(new string(string.getbytes("iso-8859-1"),"gb2312")還是顯亂碼

用<%@ page contenttype="text/html; charset=gb2312;pageencoding="gb2312"%>還是顯亂碼

上面的編碼中用utf-8,gbk,gb2312,latin1,iso-8859-1等編碼試過了,結果還是亂碼,不知道是何原因???

解答:搞了半天終於搞定了

還是mysql字元編碼的問題

預設的字元是latin1,如下:

mysql> show variables like 'character/_set/_%';

+--------------------------+--------+

| variable_name | value |

+--------------------------+--------+

| character_set_client | latin1 |

| character_set_connection | latin1 |

| character_set_database | latin1|

| character_set_filesystem | binary |

| character_set_results | latin1 |

| character_set_server | latin1|

| character_set_system | latin1 |

+--------------------------+--------+

如果在 /etc/mysql/my.cnf裡

[mysqld]下新增default-character-set=utf8  

比如:

# # * basic settings

# user        = mysql

pid-file    = /var/run/mysqld/mysqld.pid

socket        = /var/run/mysqld/mysqld.sock

port        = 3306

basedir        = /usr

datadir        = /var/lib/mysql

tmpdir        = /tmp

language    = /usr/share/mysql/english

#character_set_client=utf8

#character_set_server=utf8

#character_set_connection=utf8

#character_set_database=utf8

#character_set_results=utf8

default-character-set=utf8  

重啟mysql,發現字元變化了,變化的是 character_set_server跟system

mysql> show variables like 'character/_set/_%';

+--------------------------+--------+

| variable_name            | value  |

+--------------------------+--------+

| character_set_client     | latin1 |  

| character_set_connection | latin1 |  

| character_set_database   | latin1 |  

| character_set_filesystem | binary |  

| character_set_results    | latin1 |  

| character_set_server     | utf8   |  

| character_set_system     | utf8   |  

+--------------------------+--------+

這時候向資料庫插入中文字元,jsp顯的還是亂碼

如果在mysql命令列中執行命令:set names utf8;

再插入中文字元,ok!現在jsp 中中文顯示正常!!

set names utf8;命令相當於下面三條命令

set character_set_client=utf8;

set character_set_connection=utf8;

set character_set_results=utf8;

如圖:

mysql> show variables like 'character/_set/_%';

+--------------------------+--------+

| variable_name            | value  |

+--------------------------+--------+

| character_set_client     | utf8   |  

| character_set_connection | utf8   |  

| character_set_database   | latin1 |  

| character_set_filesystem | binary |  

| character_set_results    | utf8   |  

| character_set_server     | utf8   |  

| character_set_system     | utf8   |  

+--------------------------+--------+

character_set_server:這是設定伺服器使用的字符集

character_set_client :這是設定客戶端傳送查詢使用的字符集

character_set_connection :這是設定伺服器需要將收到的查詢串轉換成的字符集

character_set_results :這是設定伺服器要將結果資料轉換到的字符集,轉換後才傳送給客戶端

小總結:1.這樣每次進入mysql終端執行set names utf8;可以搞定亂碼,可是感覺比較煩,因為只對當前的會話有效,下次進入mysql仍然要執行這個命令。想在my。cnf裡加上

character_set_client=utf8

#character_set_server=utf8

character_set_connection=utf8

character_set_database=utf8

character_set_results=utf8

但是,這樣不行,加了後mysql根本啟動不起來,只能設定character_set_server=utf8這個,別的設定不了,如果 有哪個兄弟搞定了,麻煩告訴我一聲!

2..mysql字符集要設成utf8,可以在安裝時設定,也可以在my.cnf裡改(需要重新啟動mysql

#必須在[mysqld]這段

[mysqld]

default-character-set=utf8

2.jdbc連線無需加characterencoding,會自動檢測

jdbc:mysql://localhost/test

實際上server端字符集不是utf8的話,加了也沒用(jdbc:mysql://localhost/test&characterencoding=utf-8或者gbk)

可能還會報錯;是utf8的話,加不加都行

3.mysqlclient記得加--default-character-set

windows平台:

mysql-u root -p --default-character-set=gbk

linux平台:

mysql-u root -p --default-character-set=utf8   (這個相當於進入mysql後執行set names utf8;)

否則進去select中文是亂碼,insert中文也不能正確儲存

4. <%@ page pageencoding="utf-8"%>這句是制定客戶端的瀏覽器以什麼字元檢視本頁面,

相當於firefox瀏覽器裡的「檢視」--》「字元編碼」--》「utf-8」,當然如果制定. <%@ page pageencoding=「gb2312"%>那麼檢視本頁面的瀏覽器裡的字元編碼變為gb2312

讀出資料庫中資料

imports system.data imports system.data.sqlclient rem 有資料庫連線的時候就要寫這兩行 public class form1 private sub button2 click byval sender as system.object,byval...

jsp連線mysql小結 JSP資料庫連線方式總結

create table test test1 varchar 20 test2 varchar 20 然後向這個表寫入一條測試紀錄 那麼現在開始我們的jsp和資料庫之旅吧。一 jsp連線oracle8 8i 9i資料庫 用thin模式 testoracle.jsp如下 string url jdb...

JSP插入MYSQL資料庫的問題

上次考試的時候就一直有這個問題 漢字是亂碼 我也不知道是不是我上課沒有聽的問題 這幾天有拿出來了 想解決 在網上找了半天 現在終於是解決了 下了個最新的mysql的jdbc就好了 可能是老師給的以前的那個jdbc太舊了 不過還是有乙個簡單的方法就是在開始的的資料報頭處理中用 request.setc...