当前位置: 首页 > news >正文

GBASE南大通用数据库GBase 8s常见问题讲堂 -- 字符集的设置

本文摘自GBASE南大通用社区,by:wty,原文请点击:GBase 8s常见问题 -- 字符集相关问题|GBASE社区|天津南大通用数据技术股份有限公司|GBASE-致力于成为用户最信赖的数据库产品供应商

23103   Code-set conversion function failed due to an illegal sequence or invalid value.

字符集转换失败,字符串中出现非法字符

1. 数据库是英文字符集,在sysmaster系统库中查sysdbslocale表来确定数据库是什么字符集

[gbasedbt@test ~]$ dbaccess sysmaster -

Database selected.

> select * from 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  db_utf8
dbs_collate  zh_CN.57372

dbs_dbsname  db_gb18030
dbs_collate  zh_CN.5488

dbs_dbsname  db_en
dbs_collate  en_US.819

7 row(s) retrieved.

> 

en_US.819 : 英文

zh_CN.57372 :UTF-8 ,同zh_CN.UTF8

zh_CN.5488 : GB18030-2000,兼容gbk,同zh_CN.GB18030-2000

2. 如果是在连接数据库时报此错误,有可能是客户端/jdbc/应用程序放在含有中文的目录中,导致数据无法插入到系统库中,不能正常连接数据库。

-23197   Database locale information mismatch.

DB_LOCALE参数或环境变量与数据库不一致

按上面的方法查询数据库的字符集,修改配置

[gbasedbt@test ~]$ dbaccess db_utf8 -

23197: Database locale information mismatch. 
[gbasedbt@test ~]$ export DB_LOCALE=zh_cn.utf8
[gbasedbt@test ~]$ dbaccess db_utf8 -

Database selected.

> 

-23101   Unable to load locale categories.

字符集参数或环境变量配置错误,一般是配置了错误的值,导致无法识别

可以先去掉字符集配置,再按上面的方法查询数据库的字符集,修改配置

[gbasedbt@test ~]$ export DB_LOCALE=zh_cn.utf123
[gbasedbt@test ~]$ dbaccess sysmaster -

23101: Unable to load locale categories.
[gbasedbt@test ~]$ unset DB_LOCALE
[gbasedbt@test ~]$ dbaccess sysmaster -

Database selected.

> 

修改现有数据库的字符集

不支持直接修改数据库字符集,需要先将数据库导出,配置新字符集之后,新建数据库或导入数据库

下面举例将utf-8字符集的数据库通过导入导出的方式,重建为gb18030字符集

1. 配置DB_LOCALE、CLIENT_LOCALE环境变量,使用dbexport导出数据库

[gbasedbt@test ~]$ export DB_LOCALE=zh_cn.utf8
[gbasedbt@test ~]$ export CLIENT_LOCALE=zh_cn.utf8
[gbasedbt@test ~]$ dbexport testdb -ss
{ DATABASE testdb  delimiter | }

grant dba to "gbasedbt";、

...

dbexport completed
[gbasedbt@test ~]$

2. 删除或重命名原库(如果新库不需要与原库同名,可以跳过此步骤)

重命名:

[gbasedbt@test ~]$ dbaccess sysmaster -

Database selected.

> rename database testdb to testdb1;

Database renamed.

> 

删除:

[gbasedbt@test ~]$ dbaccess sysmaster -

Database selected.

> drop database testdb;

Database dropped.

> 

3. 修改DB_LOCALE,将刚才导出的数据库导入

如果没有删除/重命名原数据库,需要修改导出文件名为新的库名

1)修改导出的文件夹名:testdb.exp  >  testdb1.exp

2)修改数据库对象SQL文件:testdb.sql  >  testdb1.sql   此文件在导出的文件夹里

3)修改Oracle模式对象SQL文件:testdb_ora.sql  >  testdb_ora1.sql   此文件在导出的文件夹里(如果没有可以忽略)

*注意:此步骤不要修改CLIENT_LOCALE环境变量,CLIENT_LOCALE环境变量对应的是导出文件的字符集

[gbasedbt@test ~]$ export CLIENT_LOCALE=zh_cn.gb18030-2000
[gbasedbt@test ~]$ dbimport testdb -d datadbs01 -l
{ DATABASE testdb  delimiter | }

grant dba to "gbasedbt";

...

dbimport completed

set environment sqlmode 'oracle';

...

set environment sqlmode 'gbase';
[gbasedbt@test ~]$

导入命令:dbimport testdb -d datadbs01 -l

testdb :库名,对应上述导出文件中三个文件的文件名

-d datadbs01 :指定存储的dbspace,使用onstat -d查询dbspace信息

-l :指定导入数据库的日志模式为无缓存日志,不指定默认使用无日志模式,指定有缓存模式使用 -l buffered

相关文章:

  • Java实现考研专业课程管理系统 JAVA+Vue+SpringBoot+MySQL
  • 面试百问之count(1) 和 count(*) 区别是什么?
  • 机器学习-决策树【手撕】
  • Ribbon负载均衡
  • C++三剑客之std::variant(二):深入剖析
  • L1-093 猜帽子游戏(Java)
  • 【Effective C++】4. 设计与声明
  • OpenKruiseGame × KubeSphere 联合发布游戏服运维控制台,推动云原生游戏落地
  • 1.24寒假集训
  • C++高精度问题
  • 【大数据精讲】全量同步与CDC增量同步方案对比
  • (2)(2.4) CRSF/ELRS Telemetry
  • 2024免费mathtype7.4.4安装注册步骤教程
  • 【AI视野·今日NLP 自然语言处理论文速览 第七十五期】Thu, 11 Jan 2024
  • 【GitHub项目推荐--微软开源的课程(Web开发课程/机器学习课程/物联网课程/数据科学课程)】【转载】
  • openssl3.2/test/certs - 004 - cross root and root cross cert
  • Hadoop安装配置HBase
  • [设计模式Java实现附plantuml源码~创建型] 对象的克隆~原型模式
  • 【196】JAVA8 用 DOM 方式的 API 解析XML文件,无需引入第三方依赖。
  • vue中使用锚点定位
  • 哲学新书联合书单|远离苏格拉底
  • 视频丨美国两名男童持枪与警察对峙,一人还试图扣动扳机
  • 科普|揭秘女性压力性尿失禁的真相
  • 铁路部门:确保沿线群众安全,焦柳铁路6个区段将陆续安装防护栅栏
  • 《AI×SCIENCE十大前沿观察》9:合成数据和数据基础设施
  • 苹果或将于2027年推出由玻璃制成的曲面iPhone