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

MySQL-18-mysql source 执行 sql 文件时中文乱码

拓展阅读

MySQL 00 View

MySQL 01 Ruler mysql 日常开发规范

MySQL 02 truncate table 与 delete 清空表的区别和坑

MySQL 03 Expression 1 of ORDER BY clause is not in SELECT list,references column

MySQL 04 EMOJI 表情与 UTF8MB4 的故事

MySQL 05 MySQL入门教程(MySQL tutorial book)

MySQL 06 mysql 如何实现类似 oracle 的 merge into

MySQL 07 timeout 超时异常

MySQL 08 datetime timestamp 以及如何自动更新,如何实现范围查询

MySQL 09 MySQL-09-SP mysql 存储过程

MySQL 09 MySQL-group by 分组

场景

通过 mysql 的命令行连接到 mysql server 服务端,执行对应的 source xxx.sql,发现中文乱码.

确认步骤

文件格式

确保文件编码格式为 UTF-8

mysql client 编码

mysql> SHOW VARIABLES LIKE 'character_set%';                                          
+--------------------------+---------------------------------------------------+      
| Variable_name            | Value                                             |      
+--------------------------+---------------------------------------------------+      
| character_set_client     | utf8                                              |      
| character_set_connection | utf8                                              |      
| character_set_database   | utf8                                              |      
| character_set_filesystem | binary                                            |      
| character_set_results    | utf8                                              |      
| character_set_server     | utf8                                              |      
| character_set_system     | utf8                                              |      
| character_sets_dir       | D:\tool\mysql\mysql-5.7.31-winx64\share\charsets\ |      
+--------------------------+---------------------------------------------------+      
8 rows in set, 1 warning (0.03 sec)                                                   

登录后可以通过这个查看。

修改方式

可以通过 SET NAMES utf8mb4; 设置客户端编码,然后在进行执行。

验证通过。

set names UTF8mb4 命令解释

SET NAMES utf8mb4; 命令用于设置 MySQL 客户端和服务器之间的字符集通信方式。

具体来说,它设置客户端发送的数据、连接字符集以及返回结果的字符集为 utf8mb4

详细解释

SET NAMES utf8mb4; 实际上相当于以下三个设置:

  1. character_set_client:客户端使用的字符集。
  2. character_set_connection:服务器在处理客户端发送的数据时使用的字符集。
  3. character_set_results:服务器返回给客户端的结果使用的字符集。

当你执行 SET NAMES utf8mb4; 时,MySQL 会执行以下等效命令:

SET character_set_client = utf8mb4;
SET character_set_connection = utf8mb4;
SET character_set_results = utf8mb4;

为什么使用 utf8mb4

utf8mb4 是一种扩展的 UTF-8 编码,支持完整的 Unicode 字符集,包括一些不常见的符号和表情符号。

相比之下,utf8 编码只支持最多3个字节的字符,不能完全表示所有的 Unicode 字符。

适用场景

你应该在以下情况下使用 SET NAMES utf8mb4;

  • 当你知道你的数据包含完整的 Unicode 字符集,包括表情符号和其他特殊字符。
  • 当你在执行 SQL 文件之前,确保文件中的字符不会因为字符集不匹配而出现乱码。

示例

假设你有一个包含 Unicode 字符的 SQL 文件,并希望确保数据正确插入到数据库中,可以在执行 source 命令之前运行以下命令:

SET NAMES utf8mb4;
source /路径/到/你的/sql文件.sql;

这样可以确保 SQL 文件中的所有字符都能正确处理和存储。

总结

SET NAMES utf8mb4; 命令在处理包含复杂 Unicode 字符的数据时非常有用,确保客户端和服务器之间的字符集一致,防止出现乱码问题。

参考资料

https://www.jb51.net/database/3110399bu.htm

https://blog.csdn.net/weixin_44147535/article/details/135438169

http://www.lryc.cn/news/394495.html

相关文章:

  • flutter环境安装(Mac+vscode)
  • 【题解】—— LeetCode一周小结27
  • C++后端开发--网络编程基础
  • 如何将资源前端通过 Docker 部署到远程服务器
  • @react-google-maps/api实现谷歌地图嵌入React项目中,并且做到点击地图任意一处,获得它的经纬度
  • 【MySQL】2.库的操作
  • 深入Laravel服务容器:构建灵活应用的秘诀
  • 3.js - 模板渲染 - 金属切面效果
  • 【测试】系统压力测试报告模板(Word原件)
  • 图片预加载和懒加载
  • Java中的数据可视化与图表库选择
  • STM32-TIM定时器
  • Python OpenCV与霍夫变换:检测符合特定斜率范围的直线
  • ubuntu22.04+pytorch2.3安装PyG图神经网络库
  • 新型开发语言的试用感受-仓颉语言发布之际
  • 基于字典学习的地震数据降噪(MATLAB R2021B)
  • 【Web】
  • kafka-3
  • MySQL性能优化 二、表结构设计优化
  • 用HttpURLConnection复现http响应码405
  • 2-27 基于matlab的一种混凝土骨料三维随机投放模型
  • ISA95-Part4-业务流程的解析与设计思路
  • 【Spring Cloud】一个例程快速了解网关Gateway的使用
  • 仿哔哩哔哩视频app小程序模板源码
  • 数据库存储引擎
  • 【单片机毕业设计选题24049】-基于STM32单片机的智能手表设计
  • 利用面向AWS的Thales Sovereign解决方案保护AI之旅
  • 学习笔记——交通安全分析13
  • PHP-实例-文件上传
  • LeetCode刷题之HOT100之完全平方数