docker run -d -p 13306:3306 -e MYSQL_ROOT_PASSWORD=xxxxxx--name MYDB mysql
docker exec -ti xxx(容器id) /bin/bash
理论上应该启动正常 进去容器内部
mysql -u root -p
在提示下输入密码 xxxxx 正常情况下,应该出现以下提示符mysql>
mysql>SHOW VARIABLES LIKE 'character_set_%';//查看数据库字符集
SHOW VARIABLES LIKE 'collation_%';
图上的第一个 connection 就是我们通过workbench等客户端连接的时候指定的编码。
外部访问数据乱码的问题就出在这个connection连接层上
SET NAMES 'utf8';
它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
例如
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;
当然 如果是刚刚建容器的时候 我想你肯定是没有数据库的,所有此步跳过
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
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
SHOW VARIABLES LIKE 'character_set_%';
SHOW VARIABLES LIKE 'collation_%';
咚!!首先我使用的是mysql-workbench客户端
我解释一下:
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项目运行截图:
ps = conn.prepareStatement("insert into emp(empno,ename,job,sal,deptno) values(?,?,?,?,?)");
首先 我在数据库是事先插入的3条记录,都没有问题,然后再jsp中,明明插入的是中文,但是在数据库中显示乱码
我肯定是:JSP设置的出的问题
所以 我给每个servlet设置
request.setCharacterEncoding("UTF-8");
但是并没什么卵用….
你可以试试….
首先jsp页面设置编码设置为utf8
<%@ page language=”java” pageEncoding=”utf8”%>
接受对象是中文的时候对其处理
String str=new String(request.getParameter(“name”).getBytes(“ISO-8859-1”),”utf8”);
连接数据库时候指定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;
邮箱[email protected]!!!
微信:panpan668706
知乎:大牛带我飞吧
微信公众号:大牛带我飞吧
参考文档:文章1 文章2 文章3