手把手教你如何在mysql 中使用中文編碼
1.首先在docker中拉取好一個最新的mysql鏡像以后,創建一個容器:
docker run -d -p 13306:3306 -e MYSQL_ROOT_PASSWORD=xxxxxx--name MYDB mysql
- 1
參數的解釋:
- -d 設置detach為true
- -p port 映射端口 13306
- -e environment 設置密碼 xxxxx
2. docker ps 查看mysql容器是否啟動,進去容器
docker exec -ti xxx(容器id) /bin/bash
- 1
理論上應該啟動正常 進去容器內部
3.查看mysql密碼 是否正常
mysql -u root -p
- 1
在提示下輸入密碼 xxxxx 正常情況下,應該出現以下提示符mysql>
!!重點來了!!
1.前期工作 查看當前mysql字符集情況
mysql>SHOW VARIABLES LIKE 'character_set_%';//查看數據庫字符集
- 1
基本上都如下圖所示:默認就是瑞典latin1
SHOW VARIABLES LIKE 'collation_%';
- 1
圖上的第一個 connection 就是我們通過workbench等客戶端連接的時候指定的編碼。
外部訪問數據亂碼的問題就出在這個connection連接層上
1.先解決外部訪問數據亂碼的問題
SET NAMES 'utf8';
- 1
它相當於下面的三句指令:
SET character_set_client = utf8; SET character_set_results = utf8; SET character_set_connection = utf8;
- 1
- 2
- 3
2.創建數據庫,創建表的時候,包括設置字段的時候也要加上字符集設置:
例如
create database MYDB character set utf8; use JSPDB; create table t_product( pid varchar(20), pname varchar(20), price double, address varchar(30) ) DEFAULT CHARSET=utf8;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
3.如果你應經有建立了數據庫,也可以通過以下語句修改字符集
當然 如果是剛剛建容器的時候 我想你肯定是沒有數據庫的,所有此步跳過
alter database name character set utf8;#修改數據庫成utf8的. alter table type character set utf8;#修改表用utf8. alter table type modify type_name varchar(50) CHARACTER SET utf8;#修改字段用utf8
- 1
- 2
- 3
4.這一步是很重要的來修改配置文件
mysql容器的配置文件在哪呢?
我們進去容器。不輸入mysql -u root -p(即登錄數據庫)
配置文件在etc/mysql/mysql.conf.d/mysql.cnf這個文件里頭
我們找到這個文件 編輯他vi mysql.cnf,在使用docker容器時鍵入vim命令時提示:
vim: command not found
這個時候就需要安裝vim
這時候需要敲:
apt-get update
- 1
等更新完畢以后再敲命令:
apt-get install vim
- 1
然后你發現vim 編輯器可以使用以后,在此文件中添加如下字段
在 [mysqld] 標簽下加上三行
default-character-set = utf8 character_set_server = utf8
- 1
- 2
在 [mysql] 標簽下加上一行
default-character-set = utf8
- 1
在 [mysql.server]標簽下加上一行
default-character-set = utf8
- 1
在 [mysqld_safe]標簽下加上一行
default-character-set = utf8
- 1
在 [client]標簽下加上一行
default-character-set = utf8
- 1
修改結果如下:
那么如何檢驗成功了呢?
還記得我們怎么檢查mysql字符集編碼的嗎 ?
SHOW VARIABLES LIKE 'character_set_%';
- 1
我們發現有很多都變成utf8了
SHOW VARIABLES LIKE 'collation_%';
- 1
以上基本的工作都做完了。
那么現在讓我們建一個表,看看是否可以讀取寫入中文了吧!!
咚!!首先我使用的是mysql-workbench客戶端
我解釋一下:
- connection name:連接名字隨便起,這個無所謂
- hostname:是你的ip地址,如果你是雲服務器,你填上自己的公網地址就行(我是某雲)
- port:記得填上你的映射端口號 比如我們例子使用的是:13306
- username :是root
- password:你可以先輸入上,如果不輸入的時候,會提示你輸入密碼的
你會問哪來的用戶和密碼 ,你傻了,你創建容器的時候自己設置的,還記得嗎?
docker run -d -p 13306:3306 -e MYSQL_ROOT_PASSWORD=xxxxxx--name MYDB mysql
- 1
好,以下是基本的建表啊,數據庫啊的語句,我就不展開了,很容易上手!!
create database MYDB character set utf8;
- 1
use MYDB;
create table t_product( pid varchar(20), pname varchar(20), price double, address varchar(30) ) DEFAULT CHARSET=utf8;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
insert into t_product values ("A01","蘋果",2.5,"yantai");
- 1
后來 我嘗試插入多條:
insert into t_product values ("A02","橘子",4.5,"yantai"), ("A03","香江",8.5,"rizhao"), ("A04","彩電",200,"japan"), ("A05","哈哈",13.5,"shandong"), ("A06","你好",8.5,"rizhao"), ("A07","手機",100,"japan"), ("A08","電視",13.5,"linyi"), ("A09","數數",4.5,"yantai"), ("A10","書店",8.5,"rizhao");
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
然后你可以嘗試將自己建好的表查看一下:
select * from t_product;
- 1
這樣就成功了!!!
如果你還不放心,我們可以嘗試運行一個項目試一試哦!我這也不展開講了!!
我自己的一個JSP項目運行截圖:
新增:我在使用的過程中,發現在jsp的servlet中使用
ps = conn.prepareStatement("insert into emp(empno,ename,job,sal,deptno) values(?,?,?,?,?)");
- 1
首先 我在數據庫是事先插入的3條記錄,都沒有問題,然后再jsp中,明明插入的是中文,但是在數據庫中顯示亂碼
我肯定是:JSP設置的出的問題
所以 我給每個servlet設置
request.setCharacterEncoding("UTF-8");
- 1
但是並沒什么卵用….
你可以試試….
方案1:
首先jsp頁面設置編碼設置為utf8
<%@ page language=”java” pageEncoding=”utf8”%>
接受對象是中文的時候對其處理
String str=new String(request.getParameter(“name”).getBytes(“ISO-8859-1”),”utf8”);
方案2:
連接數據庫時候指定Encoding,我使用的是這個方法解決的
下面是連接數據庫的兩種不同形式:
DriverManager.getConnection("jdbc:mysql://localhost/SKDB?useUnicode=true&characterEncoding=utf8","root","xxxx");
- 1
private static final String DRIVERNAME = "com.mysql.jdbc.Driver"; private static final String URL = "jdbc:mysql://123.207.149.102:4444/testjdbc?useUnicode=true&characterEncoding=utf8"; private static final String USERNAME = "root"; private static final String PASSWORD = "xxxx"; private static Connection conn = null;
- 1
- 2
- 3
- 4
- 5
ok!!問題解決!!!
如果有任何問題,請聯系我
郵箱panpan668706@163.com!!!
微信:panpan668706
知乎:大牛帶我飛吧
微信公眾號:大牛帶我飛吧