问题描述
磐维版本: S3.2.0_B01, MySQL兼容模式
报错: The server’s client_encoding parameter was changed to UTF8MB4. The JDBC driver requires client_encoding to be UTF8 for correct operation.
报错截图:
问题排查
看报错的原因已经很明显,JDBC需要将client_encoding设置成UTF8而不是UTF8MB4。本次磐维侧已经给到指定的驱动包,测试过替换成其他驱动后也会报同样的错,继续按如下步骤排查。
检查业务侧的jdbc连接串,如下:
业务侧已经在连接串里边设置跟本次问题相关的参数选项,依然报错。
数据库层面查看相关参数设置
在磐维库里边
show server_encoding;
show client_encoding;
--结果都是UTF8。
show collation_connection;
SELECT n.nspname,b.collname,pg_encoding_to_char(b.collencoding) AS encoding_name
FROM pg_namespace n
LEFT JOIN pg_collation b ON b.oid = n.nspcollation
WHERE n.nspname !~ '^pg_'
AND n.nspname not in
(
'information_schema', 'cstore','pkg_service','dbms_job','dbms_scheduler','dbms_session',
'blockchain','dbe_perf','snapshot','dbms_utility','dbms_pipe','dbms_application_info',
'dbms_alert','dbms_profiler_proctable','wmsys','dbms_lock','dbms_lob','dbms_rowid',
'dbms_assert','dbe_pldeveloper','dbms_redact','sys','dbms_random','dbms_xplan',
'sqladvisor','dbe_pldebugger','dbe_sql_util','xmltype','audit','db4ai')
ORDER BY 1;
-- show的结果和sql查询collname,encoding_name均为空,说明业务侧也没设置过collation之类的参数。
操作系统层面查看相关参数设置
用omm主机用户执行查看如下命令:
echo $LANG
echo $LC_TYPE
echo $PGCLIENTENCODING
-- LANG结果为en_US.UTF-8,其它均显示为空。
咨询业务侧
以上参数方便设置并无异议。咨询业务侧创建库的命令为create database xxx,也没有执行过alter database xxx set xxx命令。
解决
猜测可能原因是JDBC里没加utf8mb4和utf8的映射。在opengauss官方网站可以查到与本次问题相关的资料说明(https://docs.opengauss.org/zh/docs/1.0.0/docs/Developerguide/%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93-0.html)。最后在JDBC串里边加上allowEncodingChanges=true选项,重新连接后正常。




