【MOGDB/openGauss与PostgreSQL关于GBK字符集问题】

本文揭示了PostgreSQL不支持GBK字符集的误解,以及MOGDB/openGauss的实际支持情况。作者强调了输入终端字符编码的重要性,并指出openGauss对GBK的支持随着版本提升趋于成熟。最后,提出对开源社区代码注释更新的期望。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近,在验证不同字符集数据类型存储数据位数的时候发现:
PG12不支持server_encoding=GBK。以及MOGDB/openGauss 2.0.1 build d97c0e8a支持 server_encoding=GBK。

 测试过程一开始以为MOGDB/openGauss对于server_encoding=GBK的支持有问题,但之前的文章有读者看完后给予了我反馈和纠正,经过我进一步测试,以及和社区研发人员的沟通,发现确实是我的疏忽,忽视了输入终端的字符编码影响,在这里对给予反馈的朋友表示感谢。

下边的文章进行了部分补充以及纠正:


开始的时候是想验证一下PostgreSQL里不同字符集 varchar varying(5)是不是都能存五个汉字,因此进行了如下测试,

b75048c730221e448df02a418f43085.png


 

cc7a383ccf07d6207ac610efab14102.png

3c57101282f27affb36d12e572390e3.png

UTF-8字符集时候varchar不加括号的话可插入的值就是变长的

在测试GBK字符集的时候,发现PostgreSQL是不支持server_encoding=GBK的,如下是PG12的官方文档

image.png

然后想到了MOGDB/openGauss这边,虽然MOGDB/openGauss据说是基于PG-9.2.4为基础研发的,但平时使用的时候就发现了他在一些方面做了优化,弥补了PG本身的不足,又进行了如下的测试,

bfb5803b802bb149b933229185b643a.png

上边这个报错,可以看到 server_encoding,client_encoding都是GBK的。

但是为什么插入还报错了呢,其实字符集涉及到三个因素 ,数据库服务端、数据库客户端、输入终端(包括文件),我忽视了输入终端的字符编码,例如xshell,crt等等本身也有终端的输入字符变编码,所以导致了上边的现象。

文本编码修改为GBK后进行相同测试,发现数据正常插入进去了,果然是输入终端的字符编码原因导致的。

通过实际的验证其实发现openGauss对于GBK的支持还是可以的。之前分析问题的时候去翻了翻源码,偶然发现在一部分的注释上写着这么一段话,翻译过来大概意思是:openGauss数据库在将GBK更改为数据库编码时,并没有真正考虑需要更改的代码的每个方面。

在这里插入图片描述

后续和openGauss社区的研发人员进行了一些沟通,经过反馈和验证,发现openGauss随着版本的迭代对于GBK的支持其实已经比较成熟了,代码部分也进行了大量改动,实际上仅仅是注释部分没有及时更新。而我此前的测试失败的问题也如评论的朋友所说,是我输入终端字符编码的问题。

支持server_encoding=GBK,其实是openGauss相比PostgreSQL的一大优势,因为在PostgreSQL中服务端完全不支持GBK字符集。

但是作为一款开源软件,个人比较希望社区之后在更新代码的同时也及时更新注释部分,否则大量的代码,结合表意不明和陈旧的注释,代码的易读性就差了。在用户进行阅读和分析的时候,可能会一头雾水,甚至在分析问题的时候,根据注释内容产生错误的判断。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小怪兽ysl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值