数据库字符集管理

查看数据库实例默认字符集
可使用以下两种方式查看当前实例默认字符集:
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一旦设置,不能更改,如更改了该环境变量重启数据库,会导致创建的数据库无法连接
评论


热门帖子
- 12023-05-09浏览数:16913
- 22020-05-11浏览数:10343
- 32019-04-26浏览数:10327
- 42023-09-25浏览数:9754
- 52023-07-04浏览数:9544