背景

最近同事反馈公司的产品再更新了mysql-8.0.31的驱动jar包后部分功能报错.
问题核心原因 研发这边石磊老师已经找到了.
结论是Mysql8.0.26之后的数据库驱动好像会识别操作系统的编码格式.
进而会导致尤其是stringbuilder等对象的序列化与反序列化的问题.
这里想简单复盘一下. 加强对编码格式的学习和了解.

问题现象

最开始的数据库驱动版本是 mysql-8.0.23
最近为了安全与性能升级到 mysql-8.0.31 大部分功能没问题. linux系统下也么有问题.
但是Windows系统下面的程序就报错了. 查过表的字符集, 数据库的字符集, 甚至是列的字符集都没有问题
show full columns from table_name
均是符合要求的utf8mb3字符集
(知道utf8mb4,但是产品有他的局限性.)

问题解决

可以使用 启动脚本增加 -Dfile.encoding=UTF-8
或者是 降级Mysql的驱动到 8.0.23 就可以.

问题推测

获取系统的编码格式:
Windows: chcp
Linux: local
注意: 活动代码页 936 代表的就是GBK编码格式
很多解压缩会出现乱码需要使用
unzip -O CP936 xxxx.zip 的核心原理是一样的
CP 的含义就是code page 需要注意的一点是:
Windows诞生的比utf8编码格式要早很多.
他的国际化也一直沿用了比较早的语言编码格式. Linux诞生的比Windows和utf8都要晚很多.
所以Linux很多默认的编码格式都是utf-8的

Linux再现问题

尝试修改Linux系统的编码格式.
网上的很多办法都不太好用.
我这边的方式为:
cat >/etc/profile.d/gbk.sh <<EOF
export LANG=zh_CN.GBK
EOF
source /etc/profile.d/gbk.sh 然后系统内验证一下 locale得出的结果为: [root@centos7ver2009 myapp]# locale
LANG=zh_CN.GBK
LC_CTYPE="zh_CN.GBK"
LC_NUMERIC="zh_CN.GBK"
LC_TIME="zh_CN.GBK"
LC_COLLATE="zh_CN.GBK"
LC_MONETARY="zh_CN.GBK"
LC_MESSAGES="zh_CN.GBK"
LC_PAPER="zh_CN.GBK"
LC_NAME="zh_CN.GBK"
LC_ADDRESS="zh_CN.GBK"
LC_TELEPHONE="zh_CN.GBK"
LC_MEASUREMENT="zh_CN.GBK"
LC_IDENTIFICATION="zh_CN.GBK"
LC_ALL= 然后在这个shell上面启动服务进行验证.
nohup ./startup-linux.sh >locale_gbk_startup.log &

问题确认

导致具体问题的原因不是很清楚.
但是发现跟数据库版本.和系统版本其实关系不大.
只不过因为默认的系统编码格式不一致导致了问题. 编码格式,时区,字符集,字体 其实都很关键.
有差异都会导致产品出现不一致的情况.

Linux与Windows系统字符集的简要学习的更多相关文章

  1. linux 和windows系统下同时可用的UML建模工具(umbrello),超强

    原文地址:linux 和windows系统下同时可用的UML建模工具(umbrello),超强 作者:zhangjiakouzf OPEN SOURCE 的 UML建模工具 -- umbrello   ...

  2. 在Linux和Windows系统上安装Nginx服务器的教程

    在Linux和Windows系统上安装Nginx服务器的教程  1.在CentOS系统上安装Nginx 在 CentOS6 版本的 EPEL 源中,已经加入了 nginx 的 rpm 包,不过此 RP ...

  3. Linux和Windows系统的远程桌面访问知识(转载)

    为新手讲解Linux和Windows系统的远程桌面访问知识   很多新手都是使用Linux和Windows双系统的,它们之间的远程桌面访问是如何连接的,我们就为新手讲解Linux和Windows系统的 ...

  4. 深度剖析Linux与Windows系统的区别

    当我们每个人接触Linux之前,应该先接触的都是windows吧?但我们一般接触Linux后,习惯linux的管理和使用方法后,我们再回过头再来使用windows的时候,内心其实是拒绝的.我们会觉得图 ...

  5. 深度剖析Linux与Windows系统的区别,新手必读!

    当我们每个人接触Linux之前,应该先接触的都是windows吧?但我们一般接触Linux后,习惯linux的管理和使用方法后,我们再回过头再来使用windows的时候,内心其实是拒绝的.我们会觉得图 ...

  6. linux和windows系统的区别

    在21世纪的今天,互联网可以说是当代发展最为迅速的行业,举个很简单的例子,现在的我们不论什么年龄阶层,几乎人手都有一部手机,上面的某博,某音,末手等软件,更是受到多数人的热爱,并且人们不仅仅用其来消遣 ...

  7. 使用Samba服务实现Linux与Windows系统之间的文件共享

    使用Samba服务口令验证方式可以让共享文件更加的安全,做到仅让信任的用户访问,而且验证过程也很简单,要想使用口令验证模式,我们需要先需要创建Samba服务独立的数据库. 第一步:安装Samba服务软 ...

  8. linux连接Windows系统之项目连接

    在桥接模式下 在linux内需要设置 防火墙关闭 在Windows中连接 linux的ip连接 ***项目 在linux中命令行输入setup-->防火墙配置-->空格-->确定-- ...

  9. linux、windows系统间传输文件

    日常工作中经常涉及到系统间的文件传输,下面就简单说一下常用的方法   linux--windows      工具:winscp.SecureCRT.Zmodem(sz, rz)   linux--l ...

  10. 在Linux和Windows系统中输出目录结构

    前言 一直以来就想在写文章时,能以文本形式(而不是截图)附上项目的目录结构,今天终于知道怎么操作了,在这分享一下. Linux 首先说下Linux上输出目录结构的方法. yum安装tree 需要支持t ...

随机推荐

  1. 聊聊GaussDB AP是如何执行SQL的

    本文分享自华为云社区<GaussDB AP是如何执行SQL的>,作者:yd_270088468. 前言 介绍GaussDB AP各组件是如何协调工作的,会着重介绍SQL引擎. 1.SQL引 ...

  2. API生态的发展与机遇:从5000组数据看中国API生态与开发者现状

    摘要:华为云联合多家单位发布了<中国API生态与开发者现状调研报告(2020年)>,旨在通过API生态.API开发者.使用者.API全生命周期管理等多视角展现我国API发展的现状与机遇,力 ...

  3. 教你使用Jupyter可视化查询语句的语法树

    摘要:本文以华为图引擎使用的cypher查询语言为例,将查询语句的解析结果(语法树)在jupyterLab上可视化. 本文分享自华为云社区<使用Jupyter可视化查询语句的语法树--以图查询语 ...

  4. 告别数据开发中的人工审核!火山引擎 DataLeap 落地“自动校验开发规范”能力

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近期,火山引擎 DataLeap 智能市场上线"数仓建表规范"功能,该功能通过规范数仓场景下的 ...

  5. 朋友们,就在今天,JDK 21,它终于带着重磅新特性正式发布了!

    你好呀,我是歪歪. 朋友们,好消息,好消息,重磅好消息. 从今年年初就一直在喊的具有革命性.未来性.开创新纪元的 JDK 21 按照官方的时间计划表,今天终于是要正式 GA 了: https://op ...

  6. 大数据 - DWD&DIM 业务数据

    业务数据的变化,我们可以通过 FlinkCDC 采集到,但是 FlinkCDC 是把全部数据统一写入一个 Topic 中, 这些数据包括事实数据,也包含维度数据,这样显然不利于日后的数据处理,所以这个 ...

  7. C# 和 java 基本数据类型

    C# 和 java 基本数据类型 C#类型 java类型 描述 默认值 bool boolean 布尔值 False byte byte 8 位无符号整数 0 char char 16 位 Unico ...

  8. C# Task 多任务:C# 扩展TaskScheduler实现独立线程池,支持多任务批量处理,互不干扰,无缝兼容Task

    先上源码: https://gitee.com/s0611163/TaskSchedulerEx     为什么编写TaskSchedulerEx类? 因为.NET默认线程池只有一个线程池,如果某个批 ...

  9. CF:706B. Interesting drink (二分查找)

    题意:不同奶茶店里同样的奶茶价格不同,问在当天Yuki持有的零钱能在几家店购买 思路:对价格数组排序,先优先判断是否会比较最大值和最小值,然后二分查找 #include<bits/stdc++. ...

  10. 如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 3

    在本教程的前两部分,我们分别了解和学习了Prometheus 和 Grafana 的基本概念和使用的前提条件,以及使用 Helm 在 Kubernetes 上安装 Prometheus. 在今天的教程 ...