Trafodion CQD-DYNAMIC_PARAM_DEFAULT_CHARSET

版权声明:本文为博主原创文章,如需转载,请注明出处。 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.

猜你喜欢

转载自blog.csdn.net/Post_Yuan/article/details/81283590