docker

来源:互联网 发布:ubuntu应用商店慢 编辑:程序博客网 时间:2024/06/05 11:06

如何在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 = utf8character_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!!!

参考文档:文章1 文章2 文章3

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 有鼻炎鼻子痒怎么办 感冒就清鼻涕怎么办 怀孕感冒流鼻涕打喷嚏怎么办 过敏性鼻炎打喷嚏流鼻涕怎么办 宝宝黄鼻涕鼻塞怎么办 鼻炎总是打喷嚏流鼻涕怎么办 新生儿流黄鼻涕怎么办 感冒鼻塞流鼻涕喷嚏怎么办 宝宝总是打喷嚏流鼻涕怎么办 不停的打喷嚏流鼻涕怎么办 宝宝不停打喷嚏流鼻涕怎么办 孕妇感冒流鼻涕打喷嚏怎么办 孕妇感冒咳嗽流鼻涕怎么办 鼻子痒流鼻涕流眼泪怎么办 天冷鼻子流鼻涕怎么办 感冒流水样鼻涕怎么办 一直有清水鼻涕怎么办 孩子总打喷嚏鼻塞怎么办 4岁儿童流鼻涕怎么办 孕妇清鼻涕不停怎么办 感冒流鼻水怎么办速效办法 一岁宝宝流清涕怎么办 咳嗽喉咙痛有痰怎么办 冻感冒了流鼻涕怎么办 吸烟经常嗓子疼怎么办 擦鼻涕擦破了怎么办 感冒鼻水流不停怎么办 流鼻涕鼻子都擦红了怎么办 鼻子不停的流水怎么办 擦鼻涕耳朵疼怎么办 鼻涕跟水一样怎么办 鼻涕水多打喷嚏怎么办 买来的鼻涕泥是水怎么办? 鼻炎鼻涕跟水怎么办 出门忘记带钥匙怎么办 总留鼻涕水怎么办 流像水一样的鼻涕怎么办 出门忘记带洗面奶怎么办 一侧鼻子流清水怎么办 慢性肠胃炎犯了怎么办 儿子拉肚肚子疼怎么办