当前位置: 首页 > article >正文

docker安装mysql8, 字符集,SQL大小写规范,sql_mode

一、Docker安装MySQL

使用Docker安装MySQL,命令如下

docker run -d \-p 3306:3306 \-v mysql_conf:/etc/mysql/conf.d \-v mysql_data:/var/lib/mysql \--name mysql \--restart=always \--privileged \-e MYSQL_ROOT_PASSWORD=1234 \mysql:8.0.30
  • 参数解释

🐳 docker run -d
• docker run:创建并运行一个新的容器。
• -d:以 后台模式(detached) 运行容器,终端不会显示容器的日志。

🔌 -p 3306:3306
• 将 容器内部的 3306 端口(MySQL 默认端口)映射到 主机的 3306 端口。
• 格式是 -p 主机端口:容器端口,这样主机就能访问数据库服务。

📁 -v mysql8_conf:/etc/mysql/conf.d
• 把一个名为 mysql_conf 的 Docker 卷(volume)挂载到容器的 /etc/mysql/conf.d 目录。
• 作用:你可以把自定义的 MySQL 配置文件(如 my.cnf)放到这个卷中,MySQL 会自动加载。

📦 -v mysql8_data:/var/lib/mysql
• 把名为 mysql_data 的卷挂载到 MySQL 的 数据目录。
• 保证数据库数据持久化,即使容器重启或删除,数据不会丢失。

🔑 -e MYSQL_ROOT_PASSWORD=1234
• 设置 MySQL 的 root 用户密码为 1234。
• 这是 mysql:8.0.30 镜像要求的初始化密码环境变量,否则容器会启动失败。

🧾 --name mysql
• 给容器取一个名字叫 mysql。
• 这样你可以通过名字来操作容器,例如:docker stop mysql,而不需要记住容器 ID。

♻️ --restart=always
• 设置容器的自动重启策略为 always:
• Docker 启动时自动重启容器。
• 如果容器意外退出,也会自动重启。

🔐 --privileged
• 让容器拥有更高权限,类似于“超级用户模式”。
• 通常用于容器需要访问主机硬件或修改内核设置等特殊场景。
• 注意:不建议在非必要场合使用,存在安全风险。

🐬 mysql:8.0.30
• 使用的镜像是 mysql,版本为 8.0.30。
• 如果本地没有这个镜像,Docker 会从 Docker Hub 拉取。

  • 等待安装完成
    在这里插入图片描述

测试远程连接

1、先从最简单的终端开始

mysql -h yourLinuxIp -P 3306 -u root -p
# 如果用的是默认端口 -P 3306 可以省略 ,大P指定端口, 小p指定密码

回车输入密码
在这里插入图片描述

2、使用Navicat连接

在这里插入图片描述

测试连接:MySQL8版本,图形连接时还会出现如下问题
配置新连接报错:错误号码 2058,出现这个原因是MySQL 8 之前的版本中加密规则是mysql_native_password,而在MySQL 8之后,加密规则是caching_sha2_password

解决方案:

方案一(推荐):升级SQLyog和Navicat(因此,新版SQLyog和Navicat不会出现此问题)

方案二:把MySQL用户登录密码加密规则还原成mysql_native_password。

解决方案: 登录你的 MySQL 数据库 登录你的 MySQL 数据库

# 用方法1先连接到mysql#修改默认密码校验方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1111';
#ALTER USER: 修改用户信息。
#'root'@'%': 代表用户名是 root,% 是通配符,表示允许从任意主机连接(远程连接)。
#IDENTIFIED WITH mysql_native_password: 指定使用 mysql_native_password 插件进行身份验证(这是 MySQL 较早期版本使用的认证方式)。
#BY '1234': 设置新密码为 1111。
# 执行刷新权限在重新连接即可
FLUSH PRIVILEGES;

---- 到这里安装就已经结束了,下面是一些常见配置, 是一些了解的内容

二、mysql字符集

1、默认字符集

MySQL 8版本之前,默认字符集为 latin1(ISO-8859-1) ,不支持中文,使用前必须设置字符集为utf8(utf8mb3)或utf8mb4。从MySQL 8开始,数据库的默认字符集为 utf8mb4 ,从而避免中文乱码的问题。

-- 查看MySQL使用的字符集
SHOW VARIABLES LIKE '%char%';

2、 更改字符集

具体步骤:

1、编辑MySQL配置文件:打开MySQL的配置文件,通常是my.cnf(Linux)或my.ini(Windows)。可以使用文本编辑器打开该文件。
忘记挂载配置文件的目录可以通过查看

docker inspect  容器名	

在这里插入图片描述
2.切换到此目录,创建my.cnf配置文件

cd /var/lib/docker/volumes/mysql_conf/_data
cd conf.d/
vim my.cnf
#i进入插入模式复制一下配置, 按ESC输入wq保存退出

在这里插入图片描述

3、添加字符集设置:在 [mysqld] 部分添加以下两行配置,用于设置默认字符集为UTF-8:

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

这将设置MySQL服务器的默认字符集为UTF-8,并使用utf8_general_ci作为默认的排序规则。

4、保存并关闭配置文件:保存对配置文件的修改,并关闭文本编辑器。

5、重启MySQL服务:重启MySQL服
务,以使配置更改生效。

docker restart mysql
# docker restart 容器名

查看是否生效
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3、 utf8与utf8mb4

utf8 字符集表示一个字符需要使用1~4个字节,但是我们常用的一些字符使用1~3个字节就可以表示了。而字符集表示一个字符所用的最大字节长度,在某些方面会影响系统的存储和性能,所以,设计MySQL的设计者偷偷的定义了两个概念:

utf8mb3 :utf8mb3 阉割过的 utf8 字符集,只使用1~3个字节表示字符(无法存储emoji表情)。

utf8mb4:utf8mb4正宗的 utf8 字符集,使用1~4个字节表示字符。

注意:MySQL5.7中的utf8是utf8mb3字符集 , MySQL8.0中的utf8是utf8mb4字符集

三、 SQL大小写规范

1、 Windows和Linux的区别

**Windows环境:**全部不区分大小写

Linux环境:

1、数据库名、表名、表的别名、变量名严格【区分大小写】;

2、列名与列的别名【不区分大小写】;

3、关键字、函数名称【不区分大小写】;

2、 Linux下大小写规则设置

在MySQL 8中设置的具体步骤为:

show variables like 'lower_case_table_names'
1、停止MySQL服务 
2、删除数据目录,即删除 /var/lib/mysql 目录 
3、在MySQL配置文件(/etc/my.cnf )的 [mysqld] 中添加 lower_case_table_names=1 
  • 注意:不建议在开发过程中修改此参数,将会丢失所有数据。

四、 sql_mode

1、sql_mode简介

sql_mode是MySQL中的一个系统变量,用于控制MySQL服务器在执行SQL语句时的行为和规则。它定义了MySQL对于SQL语句的语法、数据校验和处理方式的严格程度。

sql_mode可以通过设置来改变MySQL的默认行为,常见的sql_mode值包括:

1、STRICT_TRANS_TABLES:启用严格模式,要求插入或更新操作中的数据类型必须与表定义的数据类型完全匹配,否则会抛出错误。

2、NO_ZERO_IN_DATE:禁止在日期中使用零值,例如’0000-00-00’,否则会抛出错误。

3、NO_ZERO_DATE:禁止在日期或日期时间字段中使用零值,例如’0000-00-00’或’0000-00-00 00:00:00’,否则会抛出错误。

4、ERROR_FOR_DIVISION_BY_ZERO:当除数为零时,执行除法运算会抛出错误。

5、ONLY_FULL_GROUP_BY(重点了解面试):要求GROUP BY子句中的列必须出现在SELECT列表中,或者是聚合函数的参数,否则会抛出错误。

6、ANSI_QUOTES:启用ANSI_QUOTES模式,要求使用双引号来引用字符串,而不是单引号。

除了上述常见的sql_mode值,还有其他一些选项可以根据需要进行配置。

可以通过以下方式查看当前的sql_mode设置:

SHOW VARIABLES LIKE 'sql_mode';

2、 更改sql_mode

临时设置

-- 全局针对所有的客户端连接有效,要重新启动客户端生效,重启MySQL服务后失效
SET GLOBAL sql_mode = 'mode1,model2,...'; 
-- 当前会话生效,关闭当前会话就不生效了。可以省略SESSION关键字
SET SESSION sql_mode = 'mode1,model2,...';

永久设置

在mysql配置文件中配置,永久生效:在mysql配置文件中配置,永久生效:在宿主机上执行以下命令,创建配置文件:

cd /var/lib/docker/volumes/mysql_conf/_data
cd conf.d/
vim my.cnf

编辑配置文件

[mysqld]
sql-mode = "mode1,model2,..."

重启mysql容器

docker restart mysql

案例演示(ONLY_FULL_GROUP_BY)

建表并插入数据:

CREATE DATABASE test;
USE test;
CREATE TABLE employee(
id INT,
`name` VARCHAR(16),
age INT,
dept INT);
INSERT INTO employee VALUES(1,'zhang3',33,101);
INSERT INTO employee VALUES(2,'li4',34,101);
INSERT INTO employee VALUES(3,'wang5',34,102);
INSERT INTO employee VALUES(4,'zhao6',34,102);
INSERT INTO employee VALUES(5,'tian7',36,102);
  • 需求:查询每个部门年龄最大的人
-- 错误演示
-- 在SQL_MODE 约束 ONLY_FULL_GROUP_BY的情况下,分组时,select 后必须跟聚合函数(max min avg sum count),或者分组字段,name不满足上述情况所以报错
SELECT `name`, dept, MAX(age) FROM employee GROUP BY dept; 

1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘testdb.employee.name’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

  • 非 “ONLY_FULL_GROUP_BY” 模式下可以正常执行,但是得到的是错误的结果:
    在这里插入图片描述

在这里插入图片描述

-- 不推荐设置,这里只是演示, 临时设置关闭此次连接就会失效
-- 把所有的模式全部清空
SET SESSION sql_mode = '';   

正确的查询方式:查询应该分两个步骤:

1、查询每个部门最大的年龄

2、查询人

正确的语句:

 SELECT name, e.dept,max_age from employee einner join (SELECT  dept,max(age)  max_age from employeegroup by dept) as  group_max_age on  e.dept=group_max_age.dept and e.age=group_max_age.max_age

如果修改了配置文件,测试完成后再将sql_mode设置回来:

SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

如果只是设置了,当前回话有效,直接关闭连接就可以.

相关文章:

docker安装mysql8, 字符集,SQL大小写规范,sql_mode

一、Docker安装MySQL 使用Docker安装MySQL,命令如下 docker run -d \-p 3306:3306 \-v mysql_conf:/etc/mysql/conf.d \-v mysql_data:/var/lib/mysql \--name mysql \--restartalways \--privileged \-e MYSQL_ROOT_PASSWORD1234 \mysql:8.0.30参数解释 🐳 dock…...

FastMCP v2:构建MCP服务器和客户端的Python利器

FastMCP v2:构建MCP服务器和客户端的Python利器 引言 在人工智能与大语言模型(LLMs)的应用场景中,如何高效地构建服务器和客户端以实现数据交互与功能调用是关键问题。Model Context Protocol (MCP) 为此提供了一种标准&#xf…...

一个WordPress连续登录失败的问题排查

文章目录 1. 问题背景2. 解决方案搜索3. 问题定位4. 排查过程5. 清理空间6. 处理结果7. 后续优化 1. 问题背景 登录请求URL: Request URL: https://www.xxxxxx.com/wp-login.php 返回的响应头信息是: location: https://www.xxxxxx.com/wp-admin/ 证明登录成功。 接下来浏览器…...

【SSM-SSM整合】将Spring、SpringMVC、Mybatis三者进行整合;本文阐述了几个核心原理知识点,附带对应的源码以及描述解析

SSM整合的基础jar包 需要创建的层级: controller层 该层下需要创建对应的控制器Servlet POJO文件夹 该层下需要创建与数据库对应的POJO类 mapper层 该层下需要创建Mapper的接口实现 service层 该层下需要创建业务层的接口及其接口实现 需要创建的配置文件&#x…...

Go语言超时控制方案全解析:基于goroutine的优雅实现

一、引言 在构建高可靠的后端服务时,超时控制就像是守护系统稳定性的"安全阀",它确保当某些操作无法在预期时间内完成时,系统能够及时止损并释放资源。想象一下,如果没有超时控制,一个简单的数据库查询卡住…...

spark运行架构及核心组件介绍

目录 1. Spark 的运行架构1.1 Driver1.2 Executor1.3 Cluster Manager1.4 工作流程 2. Spark 的核心组件2.1 Spark Core2.2 Spark SQL2.3 Spark Streaming2.4 MLlib2.5 GraphX 3. Spark 架构图4. Spark 的优势4.1 高性能4.2 易用性4.3 扩展性4.4 容错性 5. 总结 1. Spark 的运行…...

idea中编写spark程序

### 在 IntelliJ IDEA 中配置和编写 Spark 程序 要在 IntelliJ IDEA 中高效地开发 Spark 程序,需要完成一系列必要的环境配置以及项目搭建工作。以下是详细的说明。 --- #### 1. 安装与配置 IntelliJ IDEA 为了确保 IDE 可以支持 Scala 开发,首先需要…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(21):复习

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(21):复习 1、前言(1)情况说明(2)工程师的信仰 2、知识点(1)じょうけん 条件形1、復習 (&#x…...

MYSQL数据库集群高可用和数据监控平台

项目环境 项目拓扑结构 软硬件环境清单 软硬件环境清单 软硬件环境清单 主机名IP硬件软件 master1 192.168.12.130 VIP:192.168.12.200 cpu:1颗2核 内 存:2GB HDD:20GB 网 络:NAT VmWare17 OpenEuler22.03 SP4 MySql8.0.3…...

Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库

在 Spark 中,可以使用 Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库。以下是一个完整的示例,展示如何实现这一过程。 环境准备 安装 MySQL:确保 MySQL 数据库已安装并运行。创建 MySQL 数据库和表:CREATE DAT…...

C++矩阵操作:正交矩阵(旋转矩阵)

文章目录 一、简介二、实现代码三、实现效果一、简介 我们知道判断一个矩阵的正交性可以看它是否符合以下条件: R T R = I R^TR=I R...

基于单片机的车灯智能控制系统设计与实现

标题:基于单片机的车灯智能控制系统设计与实现 内容:1.摘要 随着汽车行业的快速发展,车灯的智能化控制成为提升行车安全和驾驶体验的关键因素。本文旨在设计并实现一种基于单片机的车灯智能控制系统。采用单片机作为控制核心,结合光照传感器、雨滴传感器…...

机器学习第十一讲:标准化 → 把厘米和公斤单位统一成标准值

机器学习第十一讲:标准化 → 把厘米和公斤单位统一成标准值 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南 一、买菜…...

uni-app vue3版本打包h5后 页面跳转报错(uni[e] is not a function)

先看问题 解决方案 在HBuilderX项目中,若需在Web配置中显式关闭摇树优化(Tree Shaking),可以通过以下步骤实现:首先,在配置中打开摇树优化,然后再将其关闭。这样操作后,配置文件中会…...

大二java第一面小厂(挂)

第一场: mybatis怎么防止数据转义。 Hutool用的那些你常用的方法。 springboot的常用注解。 redis的多级缓存。 websocket怎么实现的多人协作编辑功能。 怎么实现的分库分表。 mysql里面的各种操作,比如说分表怎么分,分页查询怎么用。 mybat…...

【Redis】缓存穿透、缓存雪崩、缓存击穿

1.缓存穿透 是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,导致请求直接穿透缓存到达数据库,给数据库带来压力的情况。 常见的解决方案有两种: 缓存空对象:实现简单,维护方便&am…...

双目云台摄像机:双摄安防功能全方位

双目云台摄像机是一种具有革命性设计的云台摄像机设备,其核心在于其独特的双摄像头配置。以下是对这种先进安防设备的详细介绍: 一、核心原理 双目云台摄像机的核心原理在于利用两个摄像头从不同角度捕捉同一场景,通过先进的算法计算两个图…...

告别数据僵尸!Redis实现自动清理过期键值对

在这个数据爆炸的时代,内存就像珍贵的土地资源,而Redis则是这片土地上的智能管家。它不仅能高效存储数据,还能像秋叶定时凋零般,让键值对在指定时间自动消失。今天,就让我们揭开这项"数据保鲜"技术的奥秘。 …...

web第三次课后作业--基于JDBC对mysql数据库的增删查改操作

一、工程搭建步骤 1.新建java项目,添加jdbc依赖 2.写java程序 3.添加mysql数据源,连接本地数据库 4.运行程序二、运行结果 三、代码 代码解析 加载数据驱动 try {Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundExceptio…...

《P2345 [USACO04OPEN] MooFest G》

题目背景 P5094 [USACO04OPEN] MooFest G 加强版 题目描述 约翰的 n 头奶牛每年都会参加“哞哞大会”。 哞哞大会是奶牛界的盛事。集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等。 它们参加活动时会聚在一起,第 i 头…...

现代 Web 自动化测试框架对比:Playwright 与 Selenium 的深度剖析

现代 Web 自动化测试框架对比:Playwright 与 Selenium 的深度剖析 摘要:本文对 Playwright 与 Selenium 在开发适配性、使用难度、场景适用性及性能表现等方面进行了全面深入的对比分析。通过详细的技术实现细节阐述与实测数据支撑,为开发者…...

【网络协议】TCP、HTTP、MQTT 和 WebSocket 对比

从协议本质、工作原理、特点、应用场景等方面详细对比 TCP、HTTP、MQTT 和 WebSocket。 1. TCP(Transmission Control Protocol,传输控制协议) 本质 协议类型:传输层协议(OSI模型第4层)。核心功能&#x…...

Cython打包多层目录Python文件方法

为了使用Cython打包多层目录下的Python文件,并保持目录结构,请按照以下步骤操作: 步骤1:项目结构示例 假设项目结构如下: myproject/setup.pysrc/__init__.pymodule1.pysubdir/__init__.pymodule2.py步骤2&#xff…...

[数据结构]5. 栈-Stack

栈-Stack 1. 介绍2. 栈的实现2.1 基于链表的实现2.2 基于数组的实现 3. 栈操作CreateInitilizateDestoryPushPopTopEmptySize 1. 介绍 栈(stack) 是一种遵循先入后出逻辑的线性数据结构。顶部称为“栈顶”,底部称为“栈底”。把元素添加到栈…...

2020年下半年试题三:论云原生架构及其应用

论文库链接:系统架构设计师论文 论文题目 近年来,随着数字化转型不断深入,科技创新与业务发展不断融合,各行各业正在从大工业时代的固化范式进化成面向创新型组织与灵活型业务的崭新模式。在这一背景下,以容器盒微服务…...

基于Spring Boot + Vue的高校心理教育辅导系统

一、项目背景介绍 随着高校对学生心理健康教育的重视,传统的人工心理辅导与测评模式已经难以满足广大师生的个性化需求。为了提高心理服务的效率、便捷度和覆盖范围,本项目开发了一个高校心理教育辅导系统,集成心理评测、辅导预约、留言交流…...

JavaSwing之-JDialog

JavaSwing之-JDialog JDialog 是 Java Swing 中用于创建对话框窗口的容器类,继承自 Dialog 类(AWT),常用于显示临时信息、获取用户输入或执行模态操作。它是 javax.swing.JDialog 包中的类。 与 JFrame 不同的是,JDia…...

【学习路线】 游戏客户端开发入门到进阶

目录 游戏客户端开发入门到进阶:系统学习路线与推荐书单一、学习总原则:从底层出发,项目驱动,持续迭代二、推荐学习路线图(初学者→进阶)第一阶段:语言基础与编程思维第二阶段:游戏开…...

部署安装gitlab-ce-17.9.7-ce.0.el8.x86_64.rpm

目录 ​编辑 实验环境 所需软件 实验开始 安装部署gitlab171.配置清华源仓库(版本高的系统无需做)vim /etc/yum.repos.d/gitlab-ce.repo 2.提前下载包dnf localinstall gitlab-ce-17.9.7-ce.0.el8.x86_64.rpm --rocklinux 3.修改配…...

备战菊厂笔试2-BFS记忆化MLE?用Set去重-Set会TLE?用SortedSet剪枝

目录 200.岛屿数量 不用getnei,直接在dfs判断,去掉解包 如果害怕栈溢出那么可以用bfs 2617.网格图中最少访问的格子数 注意特判! MLE主要是因为vis占用的内存过大 用SortedSet有序剪枝 什么是SortedSet? 基本性质 导入 …...