mysql/mariadb数据库中写入中文报错,编码问题解决方案

云服务器上创建MySQL/MariaDB数据库的完整实操指南 数据库创建是数据系统建设的第一步,其本质是初始化存储空间、设定字符编码与访问权限的过程。在云服务器环境中,该操作需严格遵循隔离性、可追溯性与可迁移性原则,核心涉及CREATE DATABASE命令执行、utf8mb4字符集配置及MariaDB与MySQL的兼容性适配。技术价值在于规避乱码、权限失控与备份误覆盖等高频生产事故,广泛应用于RAGFlow后端搭建、学生成绩系统开发及等保合规部署等真实场景。本文聚焦云环境下的数据库‘出生’全过程,覆盖从服务安装、安全加固到业务库交付的终端级实操。 阅读详情

在使用MySQL数据库中,插入数据出现乱码问题,出现诸如???,或者Ñ¡Ôñ等字符。在这里对于MySQL编码问题做一个详细的介绍并对于乱码问题提出一些解决方案。


一.概念介绍

1.字符集(Character set)

    字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见的字符集名称:ASCII字符集、

GB2312字符集、BIG5字符集等。对于中文文字来说,数目大,而且还分为简体中文和繁体中文两种不同书写规范的文

字,故一般出现乱码都出现在输入中文数据的时候。常见的中文字符集:GB2312、GBK、UTF8等。


2.常见中文字符集介绍

GB2312:1980年发布,是中文信息处理的国际标准,在大陆及海外使用简体中文的地区是强制使用的唯一中

文编码。GB2312共收录6763个简体汉字、682个符号。

GBK:汉字国际扩展码,基本上采用了原来GB2312所有的汉字及码位,并涵盖原Unicode中所有的汉字,总

共收录了883个符号,21003个汉字及提供了1894个造字码位。GBK兼容GB2312,并且简、繁体字融于一库。

UTF8:UTF8编码包含全世界所有国家需要用到的字符,可在各国各种支持UTF8字符集的浏览器上显示,即使用UTF8编码,可在同一页面中显示多种国家的文字。


3.字符序(Collation)

     字符序是指在同一字符集内字符之间的比较规则,在确定字符序后,才能在一个字符集上定义什么是等价的字符,以及字符之间的大小关系。每个字符序唯一对应一种字符集,但一个字符集可以对应多种字符序,其中有一个是默认字符序(Default Collation). MySQL中的字符序名称遵从命名惯例:以字符序对应的字符集名称开头:以_ci结尾的表示大小写不敏感、以_cs结尾的表示大小写敏感,以_bin结尾的表示按编码值比较。例如:在字符序“utf8_general_ci”下字符“a”和“A”是等价的。


4.MySQL的字符集支持

     通过命令:show character set和show collation可以分别查看MySQL支持的字符集和排序方式。



5.关于MySQL字符集变量

     使用命令  show variables like 'character%'; 可看到当前连接的所有字符集设置。


character_set_client:客户端来源数据使用的字符集

character_set_connection:连接层字符集

character_set_database:当前选中数据库的默认字符集

character_set_results:查询结果字符集

character_set_server:默认的内部操作字符集

character_set_system:系统元数据(字段名等)字符集

 

众所周知,MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该使用什么字符集。但是传统的程序在创建数据库和表时并没有使用十分负责的配置,它们用的是默认的配置,那么,默认的配置从何而来呢?

(1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
(2)安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;
(3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集;
(4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server;
(5)当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;
(6)在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;
(7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;


简单的总结一下,如果什么地方都不修改,那么所有的数据库的所有表的所有栏位的都用 latin1 存储,不过我们如果安装 MySQL,一般都会选择多语言支持,也就是说,安装程序会自动在配置文件中把default_character_set设置为 UTF-8,这保证了缺省情况下,所有的数据库的所有表的所有栏位的都用 UTF-8 存储。

 

上述6个变量中,除了character_set_client,character_set_connection,character_set_results三个变量之外,其余的变量都是在安装MySQL选择语言时,自动设置的,一般不用特意改变。所以大部分的问题都是出在character_set_client,character_set_connection,character_set_results的不匹配上。

这三个参数的作用如下:


系统变量character_set_client:用来指定解析客户端传递数据的编码

系统变量character_set_connection:用来指定数据库内部处理时使用的编码

系统变量character_set_results:用来指定数据返回给客户端的编码方式

因此我们只要保证上述三个变量的编码方式是一样的,那么编码问题就不会存在。


二. 如何修改默认字符集

1.最简单的修改方法,就是修改/etc/my.ini文件中的字符集默认配置。在[client]下添加上

default-character-set=utf8(这里用utf8举例说明,如果想改成gbk,则该位置设置为gbk即可)

上述方法等同于执行以下3个命令

SET character_set_client =utf8

SET character_set_results =utf8

SET character_set_connection= utf8

2.在创建jdbc连接的时候使用jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&characterSetResults=UTF-8

 

characterEncoding=UTF-8指定了character_set_client、character_set_connection的值。

而characterSetResults=UTF-8则指定了character_set_results的值。与方法一的思路是一样的。

 

3.直接使用sql命令进行修改,在命令行中输入

SET character_set_client = utf8

SET character_set_results = utf8;

SET character_set_connection = utf8;

或者直接输入 set Names utf8 就可以同时修改三个。

4.若使用MySQL客户端 如Navicat之类的,则直接在new connection的时候在Encoding选项中选择utf8 即可

 

还是推荐第一种方法,简单方便,所有的后续操作都不会编码问题。


三. 乱码问题分析

编码问题比较容易出现在共同开发的项目中,一般是由于小组中人员在在通过各种方式连接数据库时,所选择的编码

类型不同。

Ques:数据从web端(web端使用utf8)写入,并在web页面中显示正常,但在数据库中查看却是乱码?


Ans:这里总共有两个连接。 一个是通过jdbc连接的,另一个是自己从mysql客户端建的连接用于直接查看数据库中的

数据。乱码的原因在于建立这两个连接时,设置的编码方式不同。假设,jdbc的连接是jdbc:mysql://localhost:3306/test

?characterEncoding=UTF-8&characterSetResults=UTF-8, 则意味着character_set_client,character_set_connection,

character_set_results 这三个参数都是utf8的。 即数据按照前两个参数的编码类型写入数据库,并且由于

character_set_results 也是utf8的,所以读取时返回的字符集也是utf8的则不会出现乱码。

此时如果自己mysql客户端建立的连接是gbk的, 即该连接的character_set_results是gbk的, 那么通过web端utf8格式

写入的中文字符在读取出来时需要转换为gbk的,那么就会出现乱码。由于utf8的码位远远超过gbk的,所以在gbk

的results看来该码位是不能显示的所以会显示???。 而此时如果你通过gbk的连接输入中文字符,则在web端页面

会显示Ñ¡Ôñ等外文字符,这是由于gbk的码位比utf8少, 对应的gbk的码位是可以在utf8中解析的,只是不能显示正确

的中文字符。


四.结论

我们只要保证character_set_client,character_set_connection,character_set_results

是和你使用的客户端编码格式相同,即如果你的web页面是用utf8的,那么上述三个也必

须是utf8的。如果你项目中已经出现乱码了,那么应该在组内统一编码格式,再对数据库

中的数据进行重新插入。


MySQL/MariaDB中如何支持全部的Unicode? 永远不要在 MySQL 中使用 utf8,并且始终使用 utf8mb4 。 utf8mb4介绍 MySQL/MariaDB中,utf8字符集并不是对Unicode的真正实现,即不是真正的UTF-8编码,因为它支持最多3个字节的字符。 作为可变长字符编码,UTF-8最多支持4个字节,对于emoji、中日韩繁体等部分字符,需要使用4个字节才能完整存储。也就是,如果想要支持全部的Unicode编码,MySQL/MariaDB中的utf8是不够的。 UTF-8 编码可以表示 Unicode 字符集中的每个符 阅读详情

相关推荐

Django连接MySQL/MariaDB的三层校验与字符集配置指南

Django数据库连接本质上是Python驱动、数据库服务与ORM三层协同的过程。其核心原理在于驱动(如mysqlclient或PyMySQL)通过MySQL协议与数据库服务通信,而字符集(如utf8mb4)和权限配置则决定了数据一致性与安全性。技术价值体现在避免乱码、静默失败及权限越界等典型问题。典型应用场景包括Ubuntu老旧系统部署、教学环境搭建及遗留项目维护。本文聚焦Django与MySQL/MariaDB在兼容性受限环境下的可验证接入方案,重点解析驱动编译陷阱、socket连接差异及utf8mb4

weixin_33730836的博客 556

MySQL编码详解及中文乱码问题解决方案

最近,在项目组使用的MySQL数据库中,插入数据出现乱码问题,出现诸如???,或者Ñ¡Ôñ等字符。为了防止在 今后项目中再次出现相类似问题。在这里对于MySQL编码问题做一个详细的介绍并对于乱码问题提出一些解决方案。 一. 概念介绍 1. 字符集(Character set)      字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见的字符

Xuhang_HHHH的博客 1185

MySQL/MariaDB数据库导入导出的底层原理与避坑指南

数据库导入导出并非简单的文件执行,而是涉及数据一致性、结构依赖、字符集兼容与跨引擎适配的系统性工程。其核心原理在于事务快照(如--single-transaction)、DDL生成逻辑与SQL流执行机制;技术价值体现在灾备可靠性、环境迁移可控性及CI/CD自动化能力;典型应用场景包括生产库迁移、本地开发环境初始化、主从同步修复及云数据库版本升级。深入理解mysqldump行为与mysql客户端执行约束,是保障MySQL和MariaDB间安全迁移的关键前提。

weixin_33933118的博客 421

win10 MariaDB设置字符集

楔子 学习笔记 设置MariaDB字符集 查询字符集 SHOW VARIABLES LIKE '%character%'; SHOW VARIABLES LIKE 'collation%'; 设置字符集 [mysqld] # 注意你的安装位置 datadir=C:/soft/a/MySQL/MariaDB 10.5/data port=3306 innodb_buffer_pool_size=2035M character-set-client-handshake = false chara

zhuzi51的专栏 3127

云服务器上安全创建MySQL/MariaDB数据库的完整实践

数据库是应用数据存储的核心基础设施,其初始化配置直接影响系统稳定性、安全性与中文支持能力。理解字符集(如utf8mb4)、权限模型、网络绑定及存储引擎等底层原理,是避免乱码、连接失败和删库风险的技术前提。MySQL与MariaDB在云环境中的安装方式、默认行为和安全加固路径存在关键差异,需结合发行版生态(如Ubuntu的MySQL 8.0 vs CentOS的MariaDB)进行适配。本文聚焦云服务器终端实操,覆盖从服务安装、远程访问配置、CREATE DATABASE显式声明字符集与排序规则,到最小权限用

weixin_34259232的博客 395

学习记录-Simpack生成车轮不圆的几种示例

单阶、多阶和实测车轮多边形的添加教程

weixin_51965897的博客 3705

MariaDB安装

以下有两种安装方式,第一种是msi文件的安装,另一种是下载解压的形式的安装配置 第一种: 说明: MariaDB是基于MySQL的开源数据库,兼容MySQL,现有的MySQL数据库可以迁移到MariaDB中使用 MariaDB下载: 32位:http://mirrors.hustunique.com/mariadb/mariadb-5.5.33a/win32-pack

Burgess_Lee的博客 1262

YOLOv8 WIOU

本文介绍了如何在YOLOv8中实现WIOU(Weighted Intersection over Union)的修改方法。主要修改了ultralytics/utils/metrics.py文件中的bbox_iou函数,新增了WIoU_Scale类,支持单调性FM v2、非单调性FM v3两种模式,并提供了动态调整的动量参数。修改后的函数支持多种IoU变体(GIoU、DIoU、CIoU等),通过数学公式实现了更精确的边界框回归损失计算,特别针对小目标检测场景进行了优化。该实现使用了PyTorch框架,包含完整

FJN110的博客 2046

mysql character_set_results取值_MySql4.0数据库出现的"character_set_results"问题

昨天在部署我的MAS接口程序时,出现如上标题出现的错误,客户端IP:192.168.1.100,MAS机接口程序部署在客户端。服务器IP:192.168.1.101,MySql4.0的数据库.程序连接MySql方式:采用ODBC方式, driver:mysql odbc driver5.1(这是我连接失败前采用的驱动)连接串如下(C#):connectionString="Driver={MySQ...

weixin_29613859的博客 327

云原生之容器编排实践-在K8S集群中使用Registry2搭建私有镜像仓库

基于前面搭建的3节点 Kubernetes 集群,今天我们使用 Registry2 搭建私有镜像仓库,这在镜像安全性以及离线环境下运维等方面具有重要意义。作为测试环境,本次使用 Registry2 搭建了私有镜像仓库,实际生产环境建议使用 Harbor;创建了一个 local-storage 的 StorageClass ,并使用本地磁盘的方式创建使用 PV ,实际建议使用 NFS 。

Heartsuit的博客 2461

Dify 第 19 篇 手把手教你开发 Dify 插件:从零实现一个时间工具

本文介绍了Dify平台的插件开发机制和流程。Dify支持多种插件类型,包括模型、工具、数据源等,可通过CLI工具快速开发插件。文章详细讲解了如何安装Dify CLI工具,并演示了从零开发一个获取系统时间插件的完整过程,包括项目初始化、文件解读和打包部署。通过该教程,开发者可以快速掌握Dify插件开发的核心要点,实现自定义功能扩展。

甘蓝的专栏 2447

mysql导入报编码错误问题解决

mysql导入报错 Unknown collation: 'utf8mb4_0900_ai_ci' 背景:从本地数据库中导出mysql文件,在宝塔面板安装的mysql导入的时候报错了, 经网上查询,是因为mysql数据库版本不一致的问题导致 本地版本是8.0.1.6 而生产环境的版本是5.6.4.8 一共有3种解决办法  1、检查mysql数据库的版本,发现两边数据的版本不一致,我本地的版本是5.7的,由上面报错的信息可知数据源mysql的版本是8;    2、由于本地的mysq.

蚂蚁吞象 1110

在windows系统上使用codex出现应用程序无法正常启动(0xc0000022)的解决方案

本文主要介绍了在windows系统上使用codex出现应用程序无法正常启动(0xc0000022)的解决方案,希望能对使用codex的同学们有所帮助。 文章目录 1. 问题描述 2. 原因分析 3. 解决方案

weixin_43178406的博客 10万+

MariaDB、mysql数据库无法显示中文的问题

背景: 我使用的MariaDB,但是mysql也应该一样,系统用的是ubuntu 16.04,我想写一个存储过程,存储过程中的列名有中文字符,但是每次输入的时候都有中文乱码,导致无法正常输入; 代码大概就是这个样子: create procedure p_project_stat() begin select pro.id as 项目编号 from proj...

liurui_0712的博客 1040

AD22等长布线规则

本文介绍了PCB布线中实现信号线等长的详细操作步骤:1.创建网络类(NetClass),将需要等长的信号线归入同一组;2.设置高速布线规则(High-SpeedRule),定义等长容差等参数;3.进行交互式等长布线(InteractiveLengthTuning),使用蛇形线调整线长;4.实时调整与最终检查,确保所有网络满足等长要求。文中还提供了实用技巧,如使用快捷键调整蛇形线参数、为关键信号设置更严格规则等。操作需在PCB设计软件中完成,通过统一管理、规则设置和精确调整来实现信号同步传输。

whm128的博客 1557

手把手教你学Simulink——机器人控制场景实例:基于Simulink的双足人形机器人步态生成与ZMP稳定控制仿真

ZMP是地面上合力矩在水平方向为零的点。对于平面行走: [ x_{\text{zmp}} = x_c - \frac{z_c}{g} \ddot{x}_c ]📌稳定性判据ZMP必须始终位于支撑脚的凸包(即脚掌范围内)本文完成了基于Simulink的双足人形机器人ZMP稳定控制仿真,实现了:✅ 基于LIPM生成稳定CoM轨迹✅ 构建ZMP参考与验证机制✅ 设计简化踝关节PD控制器✅ 验证ZMP始终位于支撑脚内 → 动态平衡✅ 为人形机器人步态规划奠定理论基础。

MHD0815的博客 138

从报错到搞定:我如何解决 MariaDB 中文插入的 “老大难” 问题

中文插入报错看似棘手,其实核心就是字符集的问题。记住utf8mb4这个 “万能字符集”,创建数据库和表时主动指定,能避免 90% 的中文存储问题。作为新手,遇到报错不要慌,仔细看报错信息(比如这次的),多查官方文档和社区经验,解决问题的过程就是最好的学习~如果你的数据库也遇到了中文乱码或插入失败,试试上面的方法,大概率能搞定!

wohaiweifaju的博客 786

【实战教程】BMAD-METHOD 入门教程:用 AI 组建你的“七人开发团队”

简单说,BMAD-METHOD 就像一个会自己运转的“AI 软件公司”。它不是某个单一应用,而是一种AI 工作流方法论—— 把一个项目拆解成多个角色(产品、架构、前后端、测试、运维等),每个角色由一个 AI 智能体负责协作,就像你真的在带一个 7 人团队。GitHub 项目地址 👉目前 Star 数已经达到了恐怖的 20k,可见这套方法的影响力不小。BMAD-METHOD 的核心理念不是“生成代码”,而是“自动化协作”。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1624

mysql 设置中文 重启_mysql 重启 及编码问题

Failed to start mysql.service Unit not found.执行完yum安装命令后发现竟然无法启动错误提示如下[root@localhost ~]# systemctl start mysql.serviceFailed to start mysql.service: Unit mysql.service not found.查了半天资料,终于了解到MariaDB代替...

weixin_42299566的博客 218

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

MySQL/MariaDB 在插入数据的时候提示 Incorrect string value

现象 今天开新工程,建表的时候弹出这玩意: what's this? 看起来好像是说我传入的内容不对? 可是仔细看看内容,没乱码,标准的中文字符串.想来是编码问题. 经过修改编码后,解决了问题. 解决方式 说到编码问题,我就得改编码了. 我是一个字段插入不了,那么我可以改单个字段,或者改整个表,甚至改整个数据库. 因为我这是新建的数据库,没任何数据,所以我直接改整个数据库,并重建了表,...

dingquyuan5725的博客 538

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

mysql设置了utf8mb4还是报错_MySQL中的 utf8 并不是真正的UTF8编码 ! !

出处:https://blog.youkuaiyun.com/qq_39390545/article/details/106946166❝记得去年我在往MySQL存入emoji表情??时,一直出错,无法导入。后来找到办法 -- 通过把utf8改成utf8mb4就可以了,并没有深究。一年后,我看到一篇文章讲到emoji文字占4个字节,通常要用utf-8去接收才行,其他编码可能会出错。我突然想到去年操作...

weixin_35895994的博客 376

mysql 乱码 重启后_mysql 重启 及编码问题,MYSQL中文乱码以及character_set_database属性修改...

Failed to start mysql.service Unit not found.执行完yum安装命令后发现竟然无法启动错误提示如下[root@localhost ~]# systemctl start mysql.serviceFailed to start mysql.service: Unit mysql.service not found.查了半天资料,终于了解到MariaDB代替...

weixin_39671405的博客 400

mysql设置了utf8mb4还是报错_有BUG?MySQL中的 utf8 居然并不是真正的UTF-8编码?

推荐学习阿里P8MySQL,基础/索引/锁/日志/调优都不误,一锅深扒端给你MySQL性能优化21个最佳实践,一个一个分解给你看,还怕搞不定?记得去年我在往MySQL存入emoji表情时,一直出错,无法导入。后来找到办法 -- 通过把utf8改成utf8mb4就可以了,并没有深究。一年后,我看到一篇文章讲到emoji文字占4个字节,通常要用utf-8去接收才行,其他编码可能会出错。我突然想到去年操...

weixin_33585152的博客 433

MYSQL 插入中文乱码解决方案

MYSQL 插入中文乱码解决方案   MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。下面将分两部分,分别设置服务器编码和数据库、数据表与连...

xiaowu0212的专栏 298

UE项目集成MySQL/MariaDB数据库:从环境配置到生产部署实战指南

如果你在 Unreal Engine 里需要处理玩家数据、排行榜、配置表或者任何需要持久化存储的信息,还在用本地文件或简单的 JSON 来回倒腾,那迟早会遇到性能、并发和管理的瓶颈。这时候,把 UE 和真正的数据库连起来,就成了一个绕不开的选项。 “UE-MySQL 与 MariaDB 集成 v4.1(5.8)”这个插件,就是专门干这个的。它不是一个简单的数据读写工具,而是把 MySQL/MariaDB 的客户端能力封装成了 UE 蓝图节点和 C++ 类,让你能在游戏运行时直接和远程数据库服务器对话。这意味

weixin_34161032的博客 407

Mysql(MariaDB)数据库升级产生的一些问题

由于Mysql(MariaDB)数据库版本过低,存在大量安全隐患、漏洞,故从原先5.5.46-MariaDB升级至yum源上最新版10.3.17-MariaDB。 重启数据库 问题1:后台管理平台项目(php)无法“启动”? 重启数据库服务(systemctl start mariadb)后,发现项目没有启动,一开始是白屏,过一会儿显示500错误:于是切...

u010791410的博客 1082
上一篇: BurpSuite安全测试
下一篇: tar命令---linux压缩、打包、解压教程
赔了命3000
博客等级 码龄9年 10粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值