如何设置yasql客户端的字符编码
问题现象
客户刚开始使用YashanDB, 对如何配置客户端的编码不熟悉, 直接执行不同编码的sql文件报错
YAS-00218 string conversion failed
问题的风险及影响
影响测试业务的开展。
问题影响的版本
YashanDB版本:所有版本
问题发生原因
1、如果客户端的编码和服务端一致,不需要做编码转换,如果客户端编码和服务端编码不一致,yasql采用类似linux命令iconv的逻辑,对字符串格式做转换。
2、客户端编码是在 $YASDB_HOME/client/yasc_env.ini中配置,不配置linux下默认是UTF8,windows下默认是GBK
3、服务端的配置参数是由建库参数CHARACTER_SET控制,安装之后通过系统参数查看
4、通过下面的方法做排查确认,正确设置客户端编码之后,问题解决。
解决方法及规避方式
怎么确认文件的编码?
1、xxd查看十六进制编码,在线对比编码:
字符 编码/解码 - 锤子在线工具 (toolhelper.cn)
注意:file -i检查的编码存在问题,应以检查到的实际编码为准,如下图实际编码是GBK,但是file -i命令显示是ISO-8859-1
2、使用iconv转换确认
如果源编码是正确的, iconv可以转换成目标编码,如果源编码输入错误, 则转换会失败。
[fangjingbian@k8s-24 client]$ iconv -f ISO8859-1 -t GBK test.sql -o test_gbk_iconv.sql iconv: illegal input sequence at position 37 [fangjingbian@k8s-24 client]$ iconv -f GBK -t UTF-8 test.sql -o test_gbk_iconv.sql [fangjingbian@k8s-24 client]$ file -i test_gbk_iconv.sql test_gbk_iconv.sql: text/plain; charset=utf-8 |
根据官网,配置用户客户端编码
字符集配置 | 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客户端编码转换成功。
其他
终端一般需要设置自己的编码格式, 如xshell在这里设置:
vi的时候, 使用set encoding=gbk修改编码, 创建对应的验证文件。