【YashanDB知识库】如何设置yasql客户端的字符编码

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 本文来自YashanDB官网,主要解决客户因客户端编码配置不当导致执行不同编码SQL文件时出现“YAS-00218 string conversion failed”错误的问题。问题影响所有版本的YashanDB,可能导致测试业务受阻。原因在于客户端与服务端编码不一致时,yasql采用类似iconv逻辑进行字符串转换。解决方法包括确认文件编码(如通过xxd或iconv工具)、正确配置\$YASDB_HOME/client/yasc_env.ini中的客户端编码,并验证设置结果。同时,终端需匹配相应编码格式以确保操作成功。

本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7488293.html?templateId=1718516

问题现象

客户刚开始使用YashanDB, 对如何配置客户端的编码不熟悉, 直接执行不同编码的sql文件报错

YAS-00218 string conversion failed

问题的风险及影响

影响测试业务的开展。

问题影响的版本

YashanDB版本:所有版本

问题发生原因

1、如果客户端的编码和服务端一致,不需要做编码转换,如果客户端编码和服务端编码不一致,yasql采用类似linux命令iconv的逻辑,对字符串格式做转换。

2、客户端编码是在 \$YASDB_HOME/client/yasc_env.ini中配置,不配置linux下默认是UTF8,windows下默认是GBK

image.png

3、服务端的配置参数是由建库参数CHARACTER_SET控制,安装之后通过系统参数查看

image.png

4、通过下面的方法做排查确认,正确设置客户端编码之后,问题解决。

解决方法及规避方式

怎么确认文件的编码?

1、xxd查看十六进制编码,在线对比编码:

字符 编码/解码 - 锤子在线工具 (toolhelper.cn)

image.png

image.png

注意:file -i检查的编码存在问题,应以检查到的实际编码为准,如下图实际编码是GBK,但是file -i命令显示是ISO-8859-1

image.png

2、使用iconv转换确认

如果源编码是正确的, iconv可以转换成目标编码,如果源编码输入错误, 则转换会失败。

image.png

根据官网,配置用户客户端编码

字符集配置 | YashanDB Doc (yasdb.com)

注意:

1、客户端编码不配置, linux下默认是UTF8, windows下默认是GBK

2、yasc_env.ini编码怎么填, 参考下面表格:

SQL文件编码

yasc_env.ini对应编码

GBK

GBK

UTF-8

UTF8

ASCII

ASCII

ISO-8859-1

ISO88591

GB18030

GB18030

验证编码设置结果

使用-f执行对应的sql文件,执行成功则yasql客户端编码转换成功。

image.png

其他

终端一般需要设置自己的编码格式, 如xshell在这里设置:

image.png

vi的时候, 使用set encoding=gbk修改编码, 创建对应的验证文件。

目录
打赏
0
2
3
0
75
分享
相关文章
OceanBase数据库常见问题之upgrade_post想要不显示明文密码如何解决
OceanBase 是一款由阿里巴巴集团研发的企业级分布式关系型数据库,它具有高可用、高性能、可水平扩展等特点。以下是OceanBase 数据库使用过程中可能遇到的一些常见问题及其解答的汇总,以帮助用户更好地理解和使用这款数据库产品。
OceanBase数据库常见问题之租户创建后想要改字符集如何解决
OceanBase 是一款由阿里巴巴集团研发的企业级分布式关系型数据库,它具有高可用、高性能、可水平扩展等特点。以下是OceanBase 数据库使用过程中可能遇到的一些常见问题及其解答的汇总,以帮助用户更好地理解和使用这款数据库产品。
【YashanDB知识库】崖山数据库Outline功能验证
本文来自YashanDB官网,主要测试了数据库优化器在不同场景下优先使用outline计划的功能。测试环境包括相同版本新增数据、绑定参数执行、单机主备架构以及数据库版本升级等场景。通过创建表、插入数据、收集统计信息和创建outline等步骤,验证了在各种情况下优化器均能优先采用存储的outline计划。测试结果表明,即使统计信息失效或数据库版本升级,outline功能依然稳定有效,确保查询计划的一致性和性能优化。详情可见[原文链接](https://www.yashandb.com/newsinfo/7488286.html?templateId=1718516)。
【YashanDB知识库】崖山数据库Outline功能验证
【YashanDB知识库】客户端字符集与数据库字符集兼容问题
【YashanDB知识库】客户端字符集与数据库字符集兼容问题
【YashanDB知识库】服务端是GBK编码,导致从22.2.12.100升级到22.2.13.100失败问题
在将22.2.12.100升级到22.2.13.100时出现失败,主要由于服务端(GBK)与客户端(UTF-8)编码不一致,导致`preupgrade.sql`执行结果与预期文件`preupgrade.out`不匹配。解决方法为统一客户端和服务端编码至GBK,并修改相关配置文件(如`yasc_env.ini`)。通过调整编码格式,最终成功完成升级。此问题提醒我们在版本升级过程中需确保编码一致性,以避免类似匹配错误。
【YashanDB知识库】YAC修改参数后关闭数据库夯住
【YashanDB知识库】YAC修改参数后关闭数据库夯住
【YashanDB知识库】YashanDB的JDBC/OCI驱动如何设置字符编码
YashanDB的JDBC驱动无需用户指定字符编码,能自动根据JVM和服务端字符集进行编解码,避免乱码问题。而OCI接口则需通过OCIEnvNlsCreate函数指定客户端字符集,目前仅支持852(ZHS16GBK)和871(UTF8)。用户在使用JDBC时无需关心字符集设置,但在使用OCI时需注意正确配置编码格式。
【YashanDB知识库】PHP使用ODBC使用数据库绑定参数功能异常
【YashanDB知识库】PHP使用ODBC使用数据库绑定参数功能异常
【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常
【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常
【YashanDB 知识库】GBK 库,生僻字插入 nvarchar2 字段后乱码问题
在使用 GBK 编码的数据库时,插入包含生僻字的数据会导致编码问题。GBK 编码不支持某些生僻字,导致插入后显示乱码。客户端和服务端编码不一致(如客户端为 UTF-8,服务端为 GBK)会加剧此问题。受影响版本为 23.2.4.14 及之前版本。 **解决方法:** 1. 确保终端和服务端编码一致,建议使用 UTF-8 编码。 2. 使用 yasdb client 库接口,通过 `yacBindParameter` 接口以 UTF-16 编码插入数据。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等