最近,在验证不同字符集数据类型存储数据位数的时候发现:
pg12不支持server_encoding=gbk。以及mogdb/opengauss 2.0.1 build d97c0e8a支持 server_encoding=gbk。
测试过程一开始以为mogdb/opengauss对于server_encoding=gbk的支持有问题,但之前的文章有读者看完后给予了我反馈和纠正,经过我进一步测试,发现确实是我的疏忽,忽视了输入终端的字符集,在这里对给予反馈的朋友表示感谢。同时也告诉我对于技术需要严谨。
下边的文章进行了部分补充以及纠正:
开始的时候是想验证一下postgresql里不同字符集 varchar varying(5)是不是都能存五个汉字,因此进行了如下测试,
utf-8字符集时候varchar不加括号的话可插入的值就是变长的
在测试gbk字符集的时候,发现postgresql是不支持server_encoding=gbk的,如下是pg12的官方文档
然后想到了mogdb/opengauss这边,虽然mogdb/opengauss据说是基于pg九点几为基础研发的,但平时使用的时候就发现了他在一些方面做了优化,弥补了pg本身的不足,又进行了如下的测试,
上边这个报错,可以看到 server_encoding,client_encoding都是gbk的。但是为什么插入还报错了呢,其实是我忽视了输入终端的字符集,例如xshell,crt等等本身也有终端的输入字符集。
文本编码修改为gbk后进行相同测试,发现数据正常插入进去了,果然是输入终端的字符集原因导致的。
字符集涉及到三个因素 ,数据库服务端、数据库客户端、输入终端(包括文件)。这里一时的疏忽忘记了终端的字符集,导致测试结果大相径庭,在此再此表示抱歉。