南大通用 GBase 8s JDBC字符集参数详解

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 本文详细介绍了南大通用GBase 8s V8.8 数据中四个关键的JDBC字符集参数:CLIENT_LOCALE、DB_LOCALE、NEWCODESET和NEWLOCALE,涵盖它们的功能、配置方法及其在数据库操作中的作用,旨在帮助开发者和数据库管理员提升数据处理的效率与准确性。

在数据库应用开发中,字符集的正确配置对于数据的准确存储和检索至关重要。南大通用 GBase 8s V8.8提供了多种JDBC字符集参数来优化字符处理。本文将详细介绍包括CLIENT_LOCALE、DB_LOCALE、NEWCODESET和NEWLOCALE 这4个参数,帮助开发者和数据库管理员更好地理解和应用这些参数,以提高数据库操作的效率和准确性。

一、CLIENT_LOCALE参数详解
CLIENT_LOCALE参数决定了客户端字符集的设置,影响错误消息的语言、日期时间格式等。

如zh_CN.utf8,以“.”分割的左右两部分。

左边决定:

1、抛异常时,报错信息中文还是英文

zh_CN:中文(JDBC 3.3.0版本及以前不支持)

en_US:英文

注意,这个功能需要server支持,不是所有字符集都可以修改左边的部分。

2、一些时间日期格式

java.sql.Date/java.sql.Time/java.sql.Timestamp转str,等等一些时间日期格式处理。

右边决定:

客户端这边字符集

例如,char类型的列,rs.getBytes时,用这个字符集编码。

例如,clob类型的列,ps.setBinaryStream时,用这个字符集编码。

二、DB_LOCALE参数的重要性
DB_LOCALE参数用于定义数据库字符集,确保数据在发送到服务器之前正确编码,并在从服务器检索时正确解码。

同上,也是以“.”分割的左右两部分。

左边一般用不到

右边决定:(主要是以下3种用途)

字符发给server前要经过编码,以它为字符集编码

从server取回字节数组,需要解码为字符时,以它为字符集解码

最常见的执行sql,就是先用这个字符集编码

建出来database的字符集
三、NEWCODESET参数的应用
NEWCODESET参数允许将GBase编码名称映射到JDK编码名称,提供了字符集映射的灵活性。

URL上可以写多组,以“:”分割。

每组内以“,”分割,必须有3个元素。

用途:

1、把gbase编码名或数字映射到jdk的编码名
如果url有NEWCODESET=GB18030,GB18030-2000,5488

第1个元素:GB18030(jdkEnc)

第2个元素:GB18030-2000(gbaseEncName)

第3个元素:5488(gbaseEncNumber)

当写

DB_LOACLE=zh_CN.GB18030-2000;CLIENT_LOCALE=zh_CN.GB18030-2000;

DB_LOCALE=zh_CN.5488;CLIENT_LOCALE=zh_CN.5488
驱动中编解码时使用的是被映射后的jdk编码名GB18030

2、映射成其他字符集
例如,

DB_LOCALE=en_US.819;CLIENT_LOCALE=en_US.819;NEWCODESET=UTF-8,cp1252,819
由于DB_LOCALE=en_US.819,所以建出来的database字符集是819,但是它能用来存取UTF-8的字符。

由于NEWCODESET=UTF-8,cp1252,819,编码前会把819映射为UTF-8,比如汉字字符用UTF-8进行编码,一般常见的汉字编码为3个字节,可以理解为对应819的3个字符,存到database中。查询时,从结果集取出来,用UTF-8解码。

当DB_LOCALE和CLIENT_LOCALE的右半部分指定的字符集不是819或cp1252时,那么不会进行任何映射,NEWCODESET参数无效。

映射逻辑:

看编码字符串,是否是NEWCODESET的第2个元素(gbase编码名),如果是,映射成第1个元素,结束,否则2。

看编码字符串,是否是驱动内置HashTable(假设名字是table1)的某一个key,如果是,映射成value,结束,否则3。

看编码字符串,是否是NEWCODESET的第3个元素(gbase编码数字),如果是,映射成第1个元素,结束,否则4。

看编码字符串,是否是内置HashTable(假设名字是table2)的某一个key,如果是映射成value,结束

table1 = new Hashtable();
table1.put(“88859-1”, “ISO8859_1”);
……
table1.put(“utf8”,”UTF8”);
table1.put(“GB18030”,”GB18030”);
table2 = new Hashtable();
table2.put(“819”,”ISO8859_1”);
……
table2.put(“57372”,”UTF8”);
table2.put(“5488”,”GB18030”);
4、NEWLOCALE参数的用法
NEWLOCALE参数用于映射客户端和数据库的区域设置,NEWCODESET映射的是CLIENT_LOCALE和DB_LOCALE的右边,NEWLOCALE映射左边。这个参数用的比较少,这里不做过多介绍。

通过本文的详细介绍,您应能了解GBase 8s中JDBC字符集参数的配置和应用。我们希望本文能帮助您在实际工作中更有效地管理字符集,优化数据库操作。感谢您的阅读。

相关文章
|
SQL Java 数据库连接
一篇文章彻底理解数据库的各种 JDBC 超时参数 1
一篇文章彻底理解数据库的各种 JDBC 超时参数
|
7月前
|
SQL Java 数据库连接
JDBC的连接参数的设置导致rowid自动添加到sql
JDBC的连接参数的设置导致rowid自动添加到sql
60 1
|
5月前
|
SQL Cloud Native 关系型数据库
云原生数据仓库使用问题之控制JDBC方式请求的SQL大小限制的参数是什么
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
7月前
|
存储 JavaScript 前端开发
JDBC六部曲(二)_jdbc创建状态参数,2024年最新面试基本问题及答案
JDBC六部曲(二)_jdbc创建状态参数,2024年最新面试基本问题及答案
|
7月前
|
消息中间件 Java 数据库连接
实时计算 Flink版产品使用合集之将sdkMode从rpc模式改为jdbc模式后,table.exec.mini-batch.enabled参数还生效吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
网络协议 Java 关系型数据库
一篇文章彻底理解数据库的各种 JDBC 超时参数 2
一篇文章彻底理解数据库的各种 JDBC 超时参数
|
SQL Oracle 关系型数据库
JDBC(四) 连接参数的配置(附DBUtil工具类)
进行JDBC操作时,连接参数的配置(附DBUtil工具类)
JDBC(四)  连接参数的配置(附DBUtil工具类)
|
SQL Java MySQL
MySQL JDBC 的 BATCH 执行和 rewriteBatchedStatements 参数
本来以为这是一个已解决的问题,但是发现有同学不知道,所以写一下。 经常使用 MySQL 的同学可能知道,默认情况下 MySQL JDBC 驱动是不支持 BATCH 的: ```Java try (Connection conn = dataSource.getConnection(); Statement stmt = conn.createStatement()) {
5681 0
|
关系型数据库 Java 数据库连接
tomcat jdbc 连接池 参数说明
##############################MySQL数据库连接驱动############################## #数据库连接URL url=jdbc:mysql://localhost:3306/grtg?useUnicode=true&characterEncoding=utf8 #数据库连接驱动 driver=com.mysql.jdbc.Dr
1421 0