java.sql.SQLException: Data truncation: Incorrect string value: '\xE5\x91\xA8\xE6\x9D\xBE' for column 'cname' at row 1 Query
在将项目上传到服务器时,发生这样的错误,总结了一下。
环境Centos7+tomcat7+Mariadb数据库
首先mysql -uroot -p 输入密码
然后查询数据库当前码表状态

show variables like '%char%';
结果如下
可以看出Character_set_database=latinl和Character_set_results=latinl这个两个非utf8格式
一般来说,如果为了防止数据库乱码,或者无法插入,适合采用全utf8格式 但是有可能存在存储空间损耗的问题
那么修改这两个非utf8的参数
修改mariadb数据库的参数
1.打开server.cnf文件
vi /etc/my.cnf.d/server.cnf
2.在server.cnf文件的【mysqld】标签中添加如下内容

init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake
3.打开 mysql-clients.cnf文件
vim /etc/my.cnf.d/ mysql-clients.cnf
4.在[mysql]标签下添加

default-character-set=utf8
最后看数据库连接配置
重启mariadb数据库
systemctl restart mariadb
查看数据库连接情况
如果这样依旧不能解决乱码问题 那么就设置,那么就可能是连接的问题
查看连接的字符码格式

show variables like "collation_%";
设置为UTF8

SET NAMES 'utf8';
然后如果是数据库设置编码的问题或者表设置编码的问题
这里可以看到有一个test数据库
设置test数据库的编码格式

ALTER database test character set utf8;
然后可以看到一个test表,设置表的编码格式

ALTER table test character set utf8;
最后查看表的编码格式
可以看到尽管外部是utf8设置的表的字符码,但是内部行的数据仍然为latin1的格式
所以这个时候修改行的字符为

alter table test change `cname` `cname` varchar(20) character set utf8;
最后插入一条中文数据尝试
数据库能够正常使用,而且在服务器上做测试和window上的实验结果相同
最后总结数据库存储过程中如果出现乱码或其他异常问题问题
1.数据库设置不正确产生的乱码或者错误
2.存储过程中的乱码 数据库或者表或者行的字符码不正确
3.操作数据库的url不正确或者sql语句存在问题等
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义