logo
GBase 8s
运维管理
文章

数据库字符集管理

GBase社区管理员
发表于2024-02-01 14:25:52288次浏览0个评论

查看数据库实例默认字符集

可使用以下两种方式查看当前实例默认字符集:
1、【gbasedbt】用户登陆数据库服务器,执行:

onstat -g env |grep DB_LOCALE

2、使用sql查询默认字符集:

SELECT env_value FROM sysmaster:sysenv WHERE env_name='DB_LOCALE'

以上两种方式,如无输出,则为en_US.819字符集(ISO8859-1),如有输出,则为输出字符集。
如以下示例输出表示数据库实例默认字符集为(zh_CN.GB18030-2000),该字符集兼容GBK:

zh_cn.GB18030-2000

查看当前实例中数据库的字符集

一个实例中,每个数据库字符集可以不一样,为了方便运维管理,建议实例中库的字符集保持一致。
可使用以下sql查看实例中所有库的字符集:

SELECT * FROM sysmaster:sysdbslocale;

示例输出:

dbs_dbsname  sysmaster
dbs_collate  en_US.819

dbs_dbsname  sysutils
dbs_collate  en_US.819

dbs_dbsname  sysuser
dbs_collate  en_US.819

dbs_dbsname  sysadmin
dbs_collate  en_US.819

dbs_dbsname  testdb
dbs_collate  zh_CN.57372

dbs_dbsname  testdb2
dbs_collate  zh_CN.5488

以上输出中,系统库均为en_US.819,用户库testdb为zh_CN.utf8字符集(57372),testdb2为zh_CN.GB18030-2000字符集(5488)

修改数据库默认字符集

数据库启动时设置的DB_LOCALE环境变量即为数据库实例默认字符集,要修改数据库默认字符集,设置DB_LOCALE环境变量并重启数据库:
示例:【gbasedbt】用户执行

export DB_LOCALE=zh_CN.utf8
export CLIENT_LOCALE=zh_CN.utf8
onmode -ky
oninint -v

创建非默认字符集数据库

要创建非默认字符集数据库,设置DB_LOCALE和CLIENT_LOCALE环境变量为需要的字符集即可,如数据库实例默认字符集为zh_CN.utf8,要创建zh_CN.GB18030-2000字符集的数据库,参考以下示例:

export DB_LOCALE=zh_CN.GB18030-2000
export CLIENT_LOCALE=zh_CN.GB18030-2000
echo "create database testdb in datadbs01 with log" |dbaccess - -

连接非默认字符集数据库

要连接字符集和默认字符集不一致的数据库,需要指定DB_LOCALE和CLIENT_LOCALE为需要连接数据库的字符集,如数据库默认字符集为zh_CN.utf8,testdb库的字符集为zh_CN.GB18030-2000,程序连接需设置DB_LOCALE=zh_CN.GB18030-2000,CLIENT_LOCALE=zh_CN.GB18030-2000,如不设置,数据库以默认字符集连接数据库,对于非默认字符集的库,会报错。
JDBC连接串示例:

private static String URL_STRING = "jdbc:gbasedbt-sqli://192.168.17.101:9088/testdb:GBASEDBTSERVER=gbase01;DB_LOCALE=zh_CN.GB18030-2000;CLIENT_LOCALE=zh_CN.GB18030-2000";

对于其他程序,设置DB_LOCALE和CLIENT_LOCALE环境变量后启动程序。

修改已有数据库字符集

已有数据库字符集不能直接修改,需要导出库后重建,设置CLIENT_LOCALE环境变量为计划更改的字符集,DB_LOCALE为现有字符集,导出数据库并导入即可:
示例:将testdb字符集由zh_CN.GB18030-2000修改为zh_CN.utf8

export DB_LOCALE=zh_CN.GB18030-2000
export CLIENT_LOCALE=zh_CN.utf8
dbexport testdb
echo "drop database testdb" |dbaccess - -
export DB_LOCALE=zh_CN.utf8
export CLIENT_LOCALE=zh_CN.utf8
dbimport testdb -d datadbs01

GL_USEGLU环境变量

对于无特殊要求的业务系统,推荐使用utf8字符集。
如使用utf8字符集,建议数据库启动时设置GL_USEGLU环境变量为1,支持更多的生僻字,查询系统默认是否设置GL_USEGLU

SELECT env_value FROM sysmaster:sysenv WHERE env_name='GL_USEGLU'

如无输出,则未设置
查看数据库是否设置了GL_USEGLU

name            testdb
partnum         2097280
owner           gbasedbt
created         24年01月30日
is_logging      1
is_buff_log     0
is_ansi         0
is_nls          0
is_case_insens  0
flags           -12287

is_nls=0表示未设置GL_USEGLU,is_nls=1表示已设置GL_USEGLU
GL_USEGLU一旦设置,不能更改,如更改了该环境变量重启数据库,会导致创建的数据库无法连接

评论

登录后才可以发表评论