docker - mysql - utf8 中文编码问题

2023-05-16

手把手教你如何在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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker - mysql - utf8 中文编码问题 的相关文章

  • java mysql 准备好的语句

    我正在尝试使用 java 向数据库中进行简单的插入 它告诉我我的 sql 语法已关闭 但是 当我复制打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令中时 它会正确执行该命令 并且我似乎无法弄清楚 java 中的字符串查询
  • 如何使用 MySQL 的 LOAD DATA LOCAL INFILE 在导入 CSV 时将字符串日期更改为 MySQL 日期格式

    我正在使用 MySQL 的 LOAD DATA LOCAL INFILE SQL 语句将数据从 CSV 文件加载到现有数据库表中 下面是一个 SQL 语句示例 LOAD DATA LOCAL INFILE file csv INTO TAB
  • Hibernate 对集合的查询过滤器

    我想执行以下查询 from Item i where i categoryItems catalogId catId 然而 这会产生以下异常 非法尝试取消引用集合 所以我用谷歌搜索 找到了这个 Hibernate 论坛帖子https for
  • MySQL 使用 ALTER IGNORE TABLE 出现重复错误

    我的 MySQL 中有一个有重复项的表 我尝试删除重复项并保留一项 我没有主键 我可以通过以下方式找到重复项 select user id server id count as NumDuplicates from user server
  • 无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (2)

    当我尝试连接 mysql 时出现以下错误 Can t connect to local MySQL server through socket var lib mysql mysql sock 2 这个错误有解决办法吗 其背后的原因可能是什
  • 使用 PHP 的 MySQL 连接字符串

    我正在尝试通过本地计算机连接到托管在我的服务器上的数据库 我的服务器有cPanel 11 它是一个典型的共享服务器 由CentOS提供支持 安装了PHP和MySQL 准确地说 我在同一台服务器上持有经销商帐户 我想在不同帐户或域之间访问数据
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • 带有 npm 启动脚本的 Nodejs 应用程序

    我对nodejs很陌生 在我的docker化环境中 我想为nodejs应用程序提供appdynamics支持 这要求每个应用程序都要求将以下内容作为其应用程序的第一行 require appdynamics profile controll
  • Mysql 创建定义器

    我创建了一个在 CentOS Web 服务器上运行的 Intranet Web 应用程序 该应用程序使用另一个本地服务器 始终是 CentOS 作为 MySQL 数据库 在数据库内部我创建了例程 这些例程总是这样开始 CREATE DEFI
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • 在服务器上找不到本地主机或 phpMyAdmin:如何修复?

    我按照安装说明进行操作PHP MySQL and PHPMyAdmin 但是当我尝试访问时http localhost phpmyadmin 我收到此错误 未找到 在此找不到请求的 URL phpmyadmin 服务器 然后我尝试访问loc
  • 比特纳米。重置mysql根密码

    我如何重置 MySQL 中的 root 密码和帐户 因为我按照如何为其他服务器授予权限的说明操作 并且意外地将 root 用户 Mysql 绑定到其他 IP 地址 现在看来我无法在 localhost 上以管理员身份登录 Thanks 您有
  • 如何将ElasticSearch与MySQL集成?

    在我的一个项目中 我计划将 ElasticSearch 与 MySQL 结合使用 我已经成功安装ElasticSearch 我可以单独管理ES中的索引 但我不知道如何用 MySQL 实现同样的功能 我读过一些文件 但我有点困惑 没有明确的想
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 在 PHP 字符串中格式化 MySQL 代码

    是否有任何程序 IDE 可以在 PHP 字符串中格式化 MySQL 代码 例如 我使用 PHPStorm IDE 但它无法做到这一点 它对 PHP 和 MYSQL 执行此操作 但不适用于 php 字符串内的 MYSQL 我已准备好使用新的
  • 非生产模式下的 Elasticsearch docker 容器可消除 vm.max_map_count=262144 要求

    如何配置 elasticsearch docker 容器 elasticsearch 7 5 0 以使用更少的资源并在非生产模式下运行 我想在 Jenkins 和我的桌面上运行容器 并且满足以下要求这个弹性文档 https www elas
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希
  • 有没有计算Docker容器开销的公式?

    假设我想同时运行多个 Docker 容器 我可以使用任何公式来提前了解单个 Docker 主机可以同时运行多少个容器吗 即 有多少 CPU 内存等 我必须考虑容器本身吗 它本身不是一个公式 但您可以通过检查 Linux 控制组来收集有关容器
  • 在 MySQL 中存储表情符号的编码问题:如何使用 Prisma ORM 在 NodeJS 中定义字符排序规则?

    亲爱的 Nodejs 专家和数据库专家 我们在 MySQL 数据库中存储表情符号和其他特殊字符时遇到问题 我们使用 Prisma 得到一个错误 这是我们使用的 ORM 参数无法从排序规则 utf8 general ci 转换为 utf8mb

随机推荐

  • 提高工作效率的宝藏网站和宝藏工具

    一 好用的网站 面包多 面包多 创作者在面包多 xff0c 通过出售课程 xff0c 文章 xff0c 绘画 xff0c 创意作品 xff0c 软件 xff0c 电子书 xff0c 音乐 xff0c 游戏 xff0c 咨询服务 xff0c
  • ubuntu服务器相关教程

    二 常用操作 1 ssh相关 span class token comment 安装ssh服务 span span class token function sudo span span class token function apt g
  • 超级实用的C++学习网站

    重要说明 xff1a 该博客长期更新 xff0c 方便读者查阅 xff01 一 参考资料 学习C 43 43 这几个网站足矣 二 C 43 43 学习网站 C 43 43 中文网 cppreference 当之无愧的C 43 43 学习第一
  • Vue 安装 Element Plus

    Element UI 是一款基于 Vue 的桌面端组件库 xff0c 提供了丰富的PC端组件 xff0c 简化了常用组件的封装 xff0c 大大降低了开发难度 随着 Vue 版本的更新 xff0c Element UI 2 x 升级到了El
  • gpio接口编程实例

    一 GPIO gpio general purpose ports 通用输入 输出端口 gpio的操作是所有硬件操作的基础 xff0c 这是底层开发人员必须掌握的 以三星公司的s3c2410 s3c2440为例做一下简要说明 s3c2410
  • ubuntu设置pycharm的桌面快捷方式

    写在最前面 xff1a 感谢大佬的分享 xff0c 参考了原文之后操作了一番 xff0c 除了pycharm xff0c 其他类似的软件也是一样的步骤即可创建桌面快捷方式 附上原文链接 xff1a Ubuntu 下安装pycharm 以及创
  • Anaconda在Ubuntu下的安装与简单使用

    一 Anaconda的安装 参考博客 ubuntu16 04下安装 amp 配置anaconda 43 tensorflow新手教程 1 下载 Miniconda 2 安装Miniconda bash Miniconda3 py39 4 1
  • 目标检测中NMS(非极大抑制)的概念理解

    参考博客 物体检测中常用的几个概念迁移学习 IOU NMS理解 目标定位和检测系列 xff08 3 xff09 xff1a 交并比 xff08 IOU xff09 和非极大值抑制 xff08 NMS xff09 的python实现 一 NM
  • VMware虚拟机上不能使用CUDA/CUDNN

    参考博客 VMware虚拟机上不能使用CUDA Linux Ubuntu 系统查看显卡型号 一 综述 虚拟机的显卡是虚拟的 xff0c 不能使用CUDA 虚拟机上装Nvidia显卡驱动会导致其他驱动全都不能用 xff0c 所以不能在虚拟机上
  • CUDA、CUDNN在windows下的安装及配置

    参考文章 全网最详细 Windows 安装 TensorFlow2 0 GPU 详细教程 Wind10安装anaonda 43 cuda10 1 43 cudnn 43 pytorch 43 tensorflow gpu win10 43
  • windows下CUDA的卸载以及安装

    参考博客 windows 7 下cuda 9 0 卸载 cuda8 0 安装 一 前言 对于一个刚玩CUDA菜鸟来说 xff0c 安装问题就是一个巨大的坑 xff0c 安装过程里面有很多需要注意的细节 xff0c 很多自定义的选项 xff0
  • 宇宙最强VisualStudio2017配置pyQt5用于python3.6的UI界面工具

    前言 请务必注意我的写作日期是2017年12月10日 现在的新版都在不停的变化中 xff0c 希望会越来愈好 2017年3月18日 xff0c 微软发布了Visual Studio2017 xff0c 其中的社区版可以自由下载并应用 xff
  • 【CVPR2019】超分辨率文章,SRFBN: Feedback Network for Image Super-Resoluition

    论文地址 代码 CVPR的单图像超分辨率文章 xff0c 主要是用回传机制来提高超分辨率的效果 xff0c 且不引入过多的参数 主要是设计了一个feedback模块 xff0c 多次回传 xff0c 如下图所示 xff1a 上一次feedb
  • selenium与browsermob-proxy

    BrowserMob Proxy允许您操作HTTP请求和响应 xff0c 捕获HTTP内容 xff0c 并将性能数据导出为HAR文件 BMP作为独立的代理服务器运行良好 xff0c 嵌入Selenium测试时尤其有用 下载地址如下 http
  • Ubuntu下Samba服务器搭建

    看网上Samba的搭建教程比较乱 xff0c 因此自己将Samba的搭建过程记录下来 xff0c 方便需要用到时还可以查看 1 安装 Samba xff1a apt get install samba 2 创建一个用于分享的 Samba 目
  • linux 第一章 shell编程及自动化运维实现

    linux shell编程及自动化运维实现 第一章 变量 一 shell 前言 1 shell语言的特点 SHELL语言是指Unix操作系统的命令语言 xff0c 同时又是该命令语言的解释程序的简称 shell本身是一个用c语言编写的程序
  • Error running 'ApplicationRun': 'xxx\jdk1.8.0_191\jre' is not a valid JRE home

    Error running ApplicationRun xxx jdk1 8 0 191 jre is not a valid JRE home解决办法 春节刚过 xff0c 疫情肆虐 从没见过如此冷清的成都 xff0c 阴沉的天空 xf
  • 总结一下:分页的几种办法

    总结一下 xff1a 分页的几种办法 以mysql为例 xff0c 做分页的方法 xff0c 目前我总结了3种 第一种分页 xff1a 采用Query类和PageUtils类做出分页 xff0c sql用limit获取条数 第一步 xff1
  • RabbitVCS:ubuntu下svn可视化工具的安装和使用

    转载链接 如果想在Linux环境下使用图形化界面的SVN客户端软件 xff0c 那么RabbitVCS绝对是首选 xff0c 可以媲美Windows环境下用的TortoiseSVN xff0c 甚至连操作都基本一样 xff0c 所以强烈推荐
  • docker - mysql - utf8 中文编码问题

    手把手教你如何在mysql 中使用中文编码 1 首先在docker中拉取好一个最新的mysql镜像以后 xff0c 创建一个容器 xff1a docker run span class hljs attribute d span span