首页 > 系统相关 >Linux与Windows系统字符集的简要学习

Linux与Windows系统字符集的简要学习

时间:2022-12-28 13:56:50浏览次数:46  
标签:编码 8.0 Windows 字符集 Linux 格式

背景

最近同事反馈公司的产品再更新了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 &

问题确认

导致具体问题的原因不是很清楚.
但是发现跟数据库版本.和系统版本其实关系不大.
只不过因为默认的系统编码格式不一致导致了问题. 

编码格式,时区,字符集,字体 其实都很关键.
有差异都会导致产品出现不一致的情况. 

标签:编码,8.0,Windows,字符集,Linux,格式
From: https://www.cnblogs.com/jinanxiaolaohu/p/17009968.html

相关文章

  • 华为欧拉OpenEuler(Linux)修改IP
    Euler版本:openEuler-22.03-LTS-x86_64-dvd.iso1.使用root账号登录系统2.查看当前IP命令:#ipaddr找到ip文件位置ens33 3.进入IP配置文件路径命令:# cd/etc/sys......
  • Windows修改安全日志路径方法【转】
    请尝试通过以下步骤来进行配置:1. e:\Winevt\Logs\Security.evtx打开资源管理器,并且在相应路径下创建文件夹。2.打开gpedit.msc>>computerconfiguration>>administra......
  • Linux网卡配置
    网卡配置文件配置文件路径:/etc/sysconfig/network-scripts单网卡独立配置比较重要的就是DEVICE指定网卡名,ONBOOT启用网卡,BOOTPROTO指定协议,配置静态IP则需要配置IPADDR指......
  • 【开源】基于.net6+gtksharp实现的Linux下的图形界面串口调试工具
    背景参考okeyl.com22年初从上家互联网公司离职以后,充分认识到互联网行业的风险,公司在没有自身稳定产品的情况下,互联网行业就是一个烧钱的行业,支出远远大于收入来......
  • windows安装mysql8.0.21
    一、需求背景    oracle、mysql在生产环境中是很常用的数据库,项目上也会遇到很多。项目上现在主要还是oracle为主,慢慢国产化推动的话,主流国产数据库会占大头。这次分......
  • Linux进程管理
    ps--静态查看进程ps-elf或psaux-e:显示所有进程,环境变量-l:代表长格式-f:代表完整的格式a:显示所有用户的所有进程u:显示进程的拥有者x:和a一起使用,显示所有进程(包......
  • Linux计划任务
    crontab#选项-e#编辑计划任务-l#查看计划任务-u#给其他用户设置计划任务-r#清空计划任务格式:分时日月周绝对路径......
  • Linux sshd服务
    软件包名和相关配置文件服务的软件包名openssh-server配置文件/etc/ssh/sshd_config#优化SSH连接速度,如果配置......
  • Linux软件包管理
    tar--打包压缩、解压缩命令#打包语法tar选项打包后的文件名需要打包的文件1打包文件2#解压语法tar选项包文件[-C解压到指定目录]#选项-f接文件名......
  • 深入浅出理解Linux thermal governor之IPA
    IPA(IntelligentPowerAllocation)是由ARM开发的符合linux内核thermalframework的governor,代码中的名字为power_allocator,旨在满足温控效果的条件下最大化性能。IPA背景......