jsp向mysql數據庫插入中文字段 亂碼以及中文空白的解決辦法

1.最近在學習java web,今天在做一個小demo,作用是通過瀏覽器向本地數據庫插入記錄,照着書寫了jsp代碼,插入數據也提示成功了,很興奮,但是在命令行下select 數據表,發現凡是有中文的地方就出現‘???’這樣的亂碼,如下:


然後就在網上找解決方案,根據網友提供的一些方法,我將jsp頁面中的編碼方式統統改成‘utf-8’,如下

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page contentType="text/html;charset=utf-8"%>
<%
<span style="white-space:pre">	</span>request.setCharacterEncoding("utf-8");
%>
2.然後測試,將jsp頁面上的表單提交過來的數據在網頁上打印出來,顯示正確,所以說源數據是正確的,這讓我將問題定位到mysql上,再根據網友的回答,我找到mysql的配置文件,但是我的mysql安裝目錄下沒有所說的my.ini,只有my-default.ini文件,於是依照網上所說的,在mysql安裝根目錄下複製my-default.ini,並粘貼,將名字改成my.ini,修改其內容如下:

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[mysqld]
character-set-server=utf8
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin

# These are commonly set, remove the # and set as required.
  basedir = C:\Program Files\MySQL\MySQL Server 5.6
  datadir = C:\Program Files\MySQL\MySQL Server 5.6\data
# port = .....
# server_id = .....
character-set-server=utf8


# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M 

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
3.重新啓動mysql服務:

net stop mysql

net start mysql

4.進入命令行,進入mysql:mysql -uroot(用戶root,本人未設密碼)

5.查看所有編碼:

 show variables like 'character%';

這裏的character_set_server=utf8;而在未添加my.ini文件前是下面這樣的:


character_set_server=Latin1,這就是中文亂碼的罪魁禍首。

6.解決了插入中文亂碼的問題後,我嘗試在命令行下insert一條中文記錄,結果又出現中文空白問題:


於是又去網上查,這次很順利,根據網上說的,先set names gbk;然後再插入中文記錄就ok了。

其中set names gbk;會同時改變character_set_client,character_set_connection,character_set_results的編碼值爲gbk(出現空白是因爲我之前將編碼值全部設置成了utf8導致,上面的圖是改正後的,所以有些圖文不符,不過不影響說明解決編碼問題的方法)

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