GB18030-2022 字符集标准对数据库的影响

GB18030 的新标准于 2022 年发布,2023 年 8 月 1 日起就要强制执行了。入门版本的介绍可以看电子标准化研究院 (之前的电子四所)制作的宣传稿:https://www.samr.gov.cn/xw/tp/202207/t20220728_348978.html ,或认证说明: https://www.cc.cesi.cn/upload/202303/08/202303081039585026.pdf 。相对于 GB18030-2005 版本,它做了较多 的修改,最典型的是又增加了不少汉字,总数从 70195 增加到了 87887 个,并且终于覆盖了《通用规范汉字表》 的全部汉字;少数民族文种从 6 种增加到了 10 种(不过,我一个都不认识);标准也从部分强制变成了全文强制; 还有三种实现级别的要求。对于所有具备中文信息处理能力的产品都得支持级别一,包含 27584 个汉字;搞操作系统、 数据库、中间件等基础软件的,至少要支持到级别二,比级别一增加了《通用规范汉字表》中的 196 个汉字;如果 涉及政务或公共服务,还得提高要求到级别三。所以,Windows、Linux 等操作系统默认应该支持到级别二,国内的 操作系统、数据库、中间件看样子都得照级别三执行。

Apple 公司的这位从维斯康星-麦迪逊博士毕业的老兄 Dr. Ken Lunde 是专门搞字符集和字体的,之前在 Adobe 工作。 他的总结写得很好:https://ken-lunde.medium.com/the-gb-18030-2022-standard-3d0ebaeb4132 。这图片是他搞的:

img img

有意思的是,他说全宽的人民币符号 U+FFE5 ¥ FULLWIDTH YEN SIGN 之前是个错的,只有一个横线。我的英文 WORD 里头拷贝过去确实还显示的是个全宽的只有一个横线的字符。

GB18030-2022 新标准支持的汉字有很多,如:

0x82359334  U+9FCF 鿏
0x82359339  U+9FD4 鿔 (我的旧电脑还是显示不出来)

是元数周期表中的元素,之前我的手机输入法是打不出来的。之前的标准也没包含的典型汉字还有:

0x9834B536  U+29F7E 𩽾
0x9834B631  U+29F83 𩾃
0x9834B730  U+29F8C 𩾌

我的输入法打出来的还是:鮟鱇,鱼字旁的鱼下面是四个点。

从软件实现者的角度看,新标准确实是有很多不兼容的地方。Disruptive Changes in GB 18030-2022:https://www.unicode.org/L2/L2022/22274-disruptive-changes.pdf 给出了具体可能的影响。为了和 UNICODE 互转,这里有信标委 2023-03-28 新发布的代码映射表:http://www.nits.org.cn/index/article/4034 。 那么,我们在数据库里头实现对新标准的支持,还不能去掉对旧标准的支持:因为数据库里头可能存了不少字符,其编码 位置在新标准中发生了变化。要么保留旧编码以及代码实现,要么把所有不兼容的字符都处理升级一遍。显然后者不靠谱。

从产品认证的角度看,既然是强制标准(GB 没有带那个表示推荐的字母 T 的尾巴),又有全文强制的分级,而且 2023 年 8 月 1 日生效;各位做产品的还是尽快完善功能去认证的好,别到时候投标被轰出来:😄。

[ GB18030 ]
Written on April 17, 2023