手把手教你如何在mysql 中使用中文编码
1.首先在docker中拉取好一个最新的mysql镜像以后,创建一个容器:
docker run -d -p 13306 :3306 -e MYSQL_ROOT_PASSWORD= xxxxxx-- name MYDB mysql
参数的解释:
-d 设置detach为true
-p port 映射端口 13306
-e environment 设置密码 xxxxx
2. docker ps 查看mysql容器是否启动,进去容器
docker exec -ti xxx(容器id) /bin/bash
理论上应该启动正常 进去容器内部
3.查看mysql密码 是否正常
mysql -u root -p
在提示下输入密码 xxxxx 正常情况下,应该出现以下提示符mysql>
!!重点来了 !!
1.前期工作 查看当前mysql字符集情况
mysql>SHOW VARIABLES LIKE 'character_set_%' ;
基本上都如下图所示:默认就是瑞典latin1
SHOW VARIABLES LIKE 'collation_%' ;
图上的第一个 connection 就是我们通过workbench等客户端连接的时候指定的编码。
外部访问数据乱码的问题就出在这个connection连接层上
1.先解决外部访问数据乱码的问题
SET NAMES 'utf8' ;
它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_cOnnection= utf8;
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;
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
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
等更新完毕以后再敲命令:
apt-get install vim
然后你发现vim 编辑器可以使用以后,在此文件中添加如下字段
在 [mysqld] 标签下加上三行
default -character-set = utf8
character_set_server = utf8
在 [mysql] 标签下加上一行
default -character-set = utf8
在 [mysql.server]标签下加上一行
default -character-set = utf8
在 [mysqld_safe]标签下加上一行
default -character-set = utf8
在 [client]标签下加上一行
default -character-set = utf8
修改结果如下:
那么如何检验成功了呢?
还记得我们怎么检查mysql字符集编码的吗 ?
SHOW VARIABLES LIKE 'character_set_%' ;
我们发现有很多都变成utf8了
SHOW VARIABLES LIKE 'collation_%' ;
以上基本的工作都做完了。
那么现在让我们建一个表,看看是否可以读取写入中文了吧!!
咚!!首先我使用的是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
好,以下是基本的建表啊,数据库啊的语句,我就不展开了,很容易上手!!
create database MYDB character set utf8;
use MYDB;
create table t_product(
pid varchar (20 ),
pname varchar (20 ),
price double ,
address varchar (30 )
) DEFAULT CHARSET=utf8;
insert into t_product values ("A01" ,"苹果" ,2.5 ,"yantai" );
后来 我尝试插入多条:
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" );
然后你可以尝试将自己建好的表查看一下:
select * from t_product;
这样就成功了!!!
如果你还不放心,我们可以尝试运行一个项目试一试哦!我这也不展开讲了!!
我自己的一个JSP项目运行截图:
新增:我在使用的过程中,发现在jsp的servlet中使用
ps = conn.prepareStatement("insert into emp(empno,ename,job,sal,deptno) values (?,?,?,?,?)");
首先 我在数据库是事先插入的3条记录,都没有问题,然后再jsp中,明明插入的是中文,但是在数据库中显示乱码
我肯定是:JSP设置的出的问题
所以 我给每个servlet设置
request.setCharacterEncoding ("UTF-8" )
但是并没什么卵用….
你可以试试….
方案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" )
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 ;
ok!!问题解决!!!
如果有任何问题,请联系我
邮箱panpan668706@163.com!!!
微信:panpan668706
知乎:大牛带我飞吧
微信公众号:大牛带我飞吧
参考文档:文章1 文章2 文章3