MySQL批量修改数据表编码及字符集为utf8mb4

​​​​​​MySQL批量修改数据表编码及字符集为utf8mb4

utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。 

采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。

更改数据库的编码为utf8mb4:

1. MySQL的版本#

utf8mb4的最低mysql版本支持版本为5.5.3+,若不是,请升级到较新版本。

2. MySQL驱动#

utf8mb4编码最低版本是5.1.34可用,低于5.1.13版本不能使用

3.查看配置#

注:建议直接使命令连接数据库,最好不要使Navicat等具连接,不然查出的结果不准确。

SHOW VARIABLES WHERE VARIABLE_NAME LIKE 'character_set_%' OR VARIABLE_NAME LIKE 'collation%';

 通过以上命令查看变量值,查询结果如下

通过结果,虽然collation_connection 、collation_database 、collation_server是什么没关系。

但必须保证以下几个变量必须是utf8mb4。

character_set_client (客户端来源数据使用的字符集)
character_set_connection (连接层字符集)
character_set_database (当前选中数据库的默认字符集)
character_set_results (查询结果字符集)
character_set_server (默认的内部操作字符集)

4.修改MySQL配置文件#

修改mysql配置文件my.cnf(windows 是 my.ini),找到后请在以下三部分里添加如下内容: 

[client]
default-character-set = utf8mb4[mysql]
default-character-set = utf8mb4[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_bin
init_connect='SET NAMES utf8mb4'

配置完成之后,重启数据库,检查变量,再次执行命令,可以看到变量值已修改

SHOW VARIABLES WHERE VARIABLE_NAME LIKE 'character_set_%' OR VARIABLE_NAME LIKE 'collation%';

 #

5. 数据库连接的配置#

数据库连接参数中: 

characterEncoding=utf8会被自动识别为utf8mb4,也可以不加这个参数,会自动检测。 
而autoReconnect=true是必须加上的。

 #

6. 将数据库和已经建好的表也转换成utf8mb4#

create database lyg3;

create database lyg4;

#检查库、表、字段校验码

select * from information_schema.SCHEMATA;

select TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE,TABLE_COLLATION from  information_schema.tables where  TABLE_SCHEMA in ('lyg3','lyg4');

select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,DATA_TYPE,CHARACTER_SET_NAME,COLLATION_NAME,COLUMN_TYPE from information_schema.COLUMNS where TABLE_SCHEMA in ('lyg3','lyg4');

 

select TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE,TABLE_COLLATION from  information_schema.tables where  TABLE_SCHEMA in ('lyg3','lyg4');

 

 

6.1 修改数据库编码#

ALTER DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

6.2 修改表编码#

执行以下的SQL,把数据库名改为自己的数据库名称,执行后的结果集就是修改编码和字符集的SQL, 然后复制出来,批量执行就好了。

SELECT CONCAT("ALTER TABLE `", TABLE_NAME,"` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;") AS target_tables
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA="数据库表名"
AND TABLE_TYPE="BASE TABLE"

或者

SELECT CONCAT("ALTER TABLE `",  TABLE_SCHEMA, "`.`", TABLE_NAME,"` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;") AS target_tables
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA not in ('information_schema','mysql','performance_schema','test','joe','log','performance_schema','sys','heartbeat','maxwell')
and TABLE_COLLATION='utf8mb3_general_ci';

警告:数据库中数据量比较大时,不建议这样做,因为会很卡。#

6.3 修改列的编码#

 执行以下的SQL,把数据库名改为自己的数据库名称,执行后的结果集就是修改列编码和字符集的SQL, 然后复制出来,批量执行就好了。

SELECT CONCAT("ALTER TABLE `", TABLE_SCHEMA, "`.`", TABLE_NAME, "` MODIFY COLUMN ", COLUMN_NAME, " ", COLUMN_TYPE, "  CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;") AS target_tables
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA="数据库表名"
AND CHARACTER_SET_NAME IS NOT NULL;

警告:数据库中数据量比较大时,不建议这样做,因为会很卡。#

6.4 生成外键#

SELECT
concat("ALTER TABLE ",TABLE_NAME, " ADD CONSTRAINT ", CONSTRAINT_NAME," FOREIGN KEY (", COLUMN_NAME,") REFERENCES ", REFERENCED_TABLE_NAME,"(", REFERENCED_COLUMN_NAME, "); ") AS target_tables
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA = '数据库表名';

6.5 删除外键#

SELECT
concat("ALTER TABLE ",TABLE_NAME, " DROP FOREIGN KEY ", CONSTRAINT_NAME, "; ") AS target_tables
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA = '数据库表名';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/1315.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day05-后端Web基础——TomcatServletHTTP协议SpringBootWeb入门

目录 Web基础知识课程内容1. Tomcat1.1 简介1.2 基本使用1.2.1 下载1.2.2 安装与卸载1.2.3 启动与关闭1.2.4 常见问题 2. Servlet2.1 快速入门2.1.1 什么是Servlet2.1.2 入门程序2.1.3 注意事项 2.2 执行流程 3. HTTP协议3.1 HTTP-概述3.1.1 介绍3.1.2 特点 3.2 HTTP-请求协议3…

python-42-使用selenium-wire爬取微信公众号下的所有文章列表

文章目录 1 seleniumwire1.1 selenium-wire简介1.2 获取请求和响应信息2 操作2.1 自动获取token和cookie和agent2.3 获取所有清单3 异常解决3.1 请求url失败的问题3.2 访问链接不安全的问题4 参考附录1 seleniumwire Selenium WebDriver本身并不直接提供获取HTTP请求头(header…

Android SDK下载安装(图文详解)

安装完sdk,就可以直接使用adb命令了,我们做app自动化测试,也需要sdk环境的依赖。 1. 下载Android SDK 网盘下载地址:https://pan.quark.cn/s/8398e52cefc9 官网下载地址:https://www.androiddevtools.cn/ (…

【HM-React】08. Layout模块

基本结构和样式reset 结构创建 实现步骤 打开 antd/Layout 布局组件文档,找到示例:顶部-侧边布局-通栏拷贝示例代码到我们的 Layout 页面中分析并调整页面布局 代码实现 pages/Layout/index.js import { Layout, Menu, Popconfirm } from antd impor…

51单片机入门基础

目录 一、基础知识储备 (一)了解51单片机的基本概念 (二)掌握数字电路基础 (三)学习C语言编程基础 二、开发环境搭建 (一)硬件准备 (二)软件准备 三、…

LeetCode-493. Reverse Pairs

目录 题目描述 解题思路 【C】 【Java】 https://leetcode.com/problems/reverse-pairs/description/https://leetcode.com/problems/reverse-pairs/description/ 题目描述 Given an integer array nums, return the number of reverse pairs in the array. A reverse pai…

【Python】数据容器:列表,元组,字符串,集合字典及通用操作

文章目录 一.序列1.1list列表定义常用操作列表的遍历 1.2tuple元组定义常见操作元组的遍历 1.3str字符串定义常见操作字符串的遍历 1.4序列常用操作——切片 二.set集合定义常见操作集合的遍历 三.dict字典定义常用操作字典的嵌套 *数据容器对比总结四.数据容器的通用操作4.1通…

计算机网络 笔记 数据链路层3(局域网,广域网,网桥,交换机)

局域网: LAN:在某一区域内由多台计算机互联成的计算机组,使用广播信道 特点: 覆盖范围有限:通常局限在几千米范围内,比如一栋办公楼、一个校园或一个工厂等相对较小的地理区域。 数据传输速率高:一般能达到 10Mbps…

Qt WORD/PDF(五)使用Json一键填充Word表格

关于QT Widget 其它文章请点击这里: QT Widget 国际站点 GitHub: https://github.com/chenchuhan 国内站点 Gitee : https://gitee.com/chuck_chee 姊妹篇: 《Qt WORD/PDF(一)使用 QtPdfium库实现 PDF 操作》 《Qt WORD/PDF&#…

Elasticsearch入门学习

Elasticsearch是什么 Elasticsearch 是一个基于 Apache Lucene 构建的分布式搜索和分析引擎、可扩展的数据存储和矢量数据库。 它针对生产规模工作负载的速度和相关性进行了优化。 使用 Elasticsearch 近乎实时地搜索、索引、存储和分析各种形状和大小的数据。 特点 分布式&a…

spring cloud的核心模块有哪些

Spring Cloud 的核心模块就像一套精心设计的工具箱,每个模块都扮演着特定的角色,共同构建起微服务架构的坚实基础。 1. Spring Cloud Netflix(部分组件已迁移或弃用,但仍是理解 Spring Cloud 的重要参考): …

Linux创建server服务器实现多方信息收发

一,服务端 1.创建socket套接字,用于网络通信,同一台机器上的进程也可以通过本地套接字进行通信 //1.socket s_fd socket(AF_INET,SOCK_STREAM,0); if(s_fd -1){ perror("socket"); exit(-1); } //server address s_addr.sin_fami…

工厂人员定位管理系统方案(二)人员精确定位系统架构设计,适用于工厂智能管理

哈喽~这里是维小帮,提供多个场所的定位管理方案,如需获取工厂人员定位管理系统解决方案可前往文章最下方获取,如有项目合作及技术交流欢迎私信我们哦~撒花 在上一篇文章中,我们初步探讨了工厂人员定位管理系统的需求背景以及定位方…

金融项目实战 04|JMeter实现自动化脚本接口测试及持续集成

目录 一、⾃动化测试理论 二、自动化脚本 1、添加断言 1️⃣注册、登录 2️⃣认证、充值、开户、投资 2、可重复执行:清除测试数据脚本按指定顺序执行 1️⃣如何可以做到可重复执⾏? 2️⃣清除测试数据:连接数据库setup线程组 ①明确…

C++ ——— 内部类

目录 内部类的概念 内部类的特征 sizeof(外部类) 的大小 内部类的实例化 内部类就是外部类的友元 内部类的概念 如果一个类定义在另一个类的内部,这个内部类就叫做内部类,内部类是一个独立的类,它不属于外部类,更不能通过外…

ubuntu22.4 ROS2 安装gazebo(环境变量配置)

ubuntu版本:ubuntu22.4 最近在学习ROS2 视频教程古月居的入门课: 视频教程 文字笔记 问题 在学到关于Gazebo的时候,遇到下面问题: 运行 $ ros2 launch gazebo_ros gazebo.launch.py在这里卡住,不弹出gazebo 解决…

QT Quick QML 实例之椭圆投影,旋转

文章目录 一、前言二、演示三、部分代码与分析 QML 其它文章请点击这里: QT QUICK QML 学习笔记 国际站点 GitHub: https://github.com/chenchuhan 国内站点 Gitee : https://gitee.com/chuck_chee 一、前言 此 Demo 主要用于无人机吊舱视角的模拟&#xf…

Java-数据结构-栈与队列(常考面试题与单调栈)

在上一篇的学习中,我们学习了栈和队列的基本知识,以及它们对应都有哪些方法,在什么应用场景下如何使用,并且还对它们进行了模拟实现,而其实对于栈和队列的相关知识还远不止于此,而今天我们就对栈与队列进行…

【Docker】Docker部署多种容器

关于docker,Windows上使用Powershell/CMD执行指令,Linux系统直接使用终端执行指令。 docker安装MySQL 拉取MySQL 也可以跳过拉取步骤,直接run,这样本地容器不存在的话,会自动拉取最新/指定的版本。 # 默认拉取最新…

Apache Hop从入门到精通 第二课 Apache Hop 核心概念/术语

1、apache hop核心概念思维导图 虽然apache hop是kettle的一个分支,但是它的概念和kettle还是有一些区别的,下图是我根据官方文档梳理的appache hop的核心概念思维导图。 2、Tools(工具) 1)Hop Conf Hop Conf 是一个…