暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase8S支持中文生僻字注意事项

原创 songnuan 2022-06-30
1303

GBase8s数据库支持中文生僻字

注意事项

将数据导入到GBase8s数据库中,我们会进行建库、建表、建字段的操作,当这些操作完成以后在初期导入一些测试或样例数据的时候都比较顺利。但有时到了正式环境,数据变多以后,里面藏着一些意向不到的特殊字符或生僻字会导致我们导入失败。所以以此文档记录在GBase8s建库过程中对生僻字处理的注意事项

关键的环境变量

  • DB_LOCALE

含义:

通过 DB_LOCALE 环境变量设置的数据库语言环境指定数据库服务器用于正确解释特定数据库中语言环境相关的数据类型(NCHAR 和 NVARCHAR)所需的语言、地域和代码集。DB_LOCALE 中指定的代码集确定哪些字符在任何字符列中都是有效的,并且确定数据库对象(如数据库、表、列和视图)的名称。数据库服务器使用 DB_LOCALE 环境变量指定的数据库代码集将数据传入和传出数据库。

用途:

  1. 在客户机应用程序和数据库服务器交换字符数据时,如果 DB_LOCALE 环境变量(在客户机计算机上)的值与 CLIENT_LOCALE 的值不同,客户机应用程序将执行代码集转换。 代码集转换防止这两种代码集不同时发生数据破坏。
  2. 在客户机应用程序请求连接时,它将包括 DB_LOCALE(如果已设置)的信息发送至数据库服务器。
  3. 在确定如何设置服务器处理语言环境的数据库信息时,数据库服务器使用 DB_LOCALE。
  4. 在客户机应用程序尝试打开数据库时,数据库服务器将客户机应用程序传递的 DB_LOCALE 环境变量的值与数据库中存储的数据库语言环境进行比较。
  5. 当数据库服务器存取与语言环境相关的数据类型的列时,数据库服务器使用 DB_LOCALE 指定的语言环境。
  6. 当数据库服务器创建新数据库时,它将检查数据库语言环境(DB_LOCALE),以确定如何在数据库的系统目录中存储字符信息。此信息包括诸如如何处理正则表达式、比较字符串以及确保代码集的正确使用的操作。

所以如果我们的数据库需要支持中文字符,我们必须在建库的时候必须将该变量设置为zh_CN.utf8或zh_cn.GB18030-2000。否则如果按照en_us.8859-1进行建库后,在插入中午字符后将会变成乱码。以下是字符集名称及编码对照表

字符集名称

编码

8859-1

819

gb

57357

GB2312-80

57357

utf8

57372

big5

57352

GB18030-2000

5488

字符集名称及编码对照表

  • GL_USEGLU

含义:

如果想使NCHAR 和 NVARCHAR数据类型的字段内的数据支持unicode,则必须对GL_USEGLU环境变量进行使用设置

所以如果我们的数据库不仅需要支持中文,还需要支持生僻字符,则必须在建库前开启此变量

实际操作

我们需要把生僻字“”插入到数据库中,根据刚才的描述我们需要正确设置两个地方才能保证“”字成功入库

我们首先使用echo $DB_LOCALE;命令查看当前该变量的值

发现当前该变量的值不是zh_CN.utf8或zh_cn.GB18030-2000

所以我们在建立数据库之前,需要先将变量进行修改

其次我们需要使用onstat -g env命令确认GL_USEGLU是否进行了设置

当这两个变量都设置完毕后,我们使用dbaccess建立数据库testdb3

建表操作、新增生僻字记录,详情如下图所示,操作成功

使用如下语句确认当前数据库的编码,显示的是zh_CN.57372, 根据刚才的字符集名称及编码对照表,可知编码57372对应的字符集名称是utf8

SELECT * FROM sysmaster:sysdbslocale WHERE dbs_dbsname like 'testdb3%';

以下是我们测试当不设置GL_USEGLU变量的情况

我们通过unset GL_USEGLU命令变量使GL_USEGLU失效

使用onstat -g env命令对当前环境变量进行查看,发现已经没有了 GL_USEGLU环境变量

此时我们通过dbaccess建立了testdb4数据库

我们再插入刚才的生僻字“”将会如下图所示报错 34389 Illegal character 非法字符

再来测试插入正常汉字的情况

插入正常汉字是没有问题的

结论

当我们处理汉字中的生僻字的时候需要同时注意两个地方。在建立数据库前

需要正确设置DB_LOCALE环境变量的值,需要是zh_CN.utf8或zh_cn.GB18030-2000;

查看命令:echo $DB_LOCALE;

设置命令:export DB_LOCALE=zh_CN.utf8; 或 export DB_LOCALE=zh_cn.GB18030-2000;

GL_USEGLU环境变量是否已进行设置

查看命令:onstat -g env

设置命令:export GL_USEGLU=1;

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论