版权声明:本文为博主原创文章,如需转载,请注明出处。 https://blog.csdn.net/Post_Yuan/article/details/81283590
Trafodion在某些场景下使用传参的方式可能会遇到字符编码的问题,以下是一个事例,当按照中文字符做过滤时查询不到数据。
SQL>create table t_param(a varchar(10));
--- SQL operation complete.
SQL>insert into t_param values('中国');
--- 1 row(s) inserted.
SQL>prepare s from select * from t_param where a like '%'||?||'%';
--- SQL command prepared.
SQL>execute s using '中';
--- 0 row(s) selected.
这是因为Trafodion对于动态参数的编码默认使用了ISO88591,
>>cqd showcontrol_show_all 'on';
--- SQL operation complete.
>>showcontrol default DYNAMIC_PARAM_DEFAULT_CHARSET;
No CONTROL QUERY DEFAULT DYNAMIC_PARAM_DEFAULT_CHARSET settings are in effect.
Current DEFAULTS
DYNAMIC_PARAM_DEFAULT_CHARSET ISO88591
--- SQL operation complete.
没有考虑到中文字符需要使用UTF8编码格式,导致查询无效,我们可以使用DYNAMIC_PARAM_DEFAULT_CHARSET这个CQD指定动态参数的默认编码为UTF8格式,
SQL>cqd DYNAMIC_PARAM_DEFAULT_CHARSET 'UTF8';
--- SQL operation complete.
SQL>prepare s from select * from t_param where a like '%'||?||'%';
--- SQL command prepared.
SQL>execute s using '中';
A
----------------------------------------
中国
--- 1 row(s) selected.