H2数据库中的Characterset

时间:2017-03-06 15:38:18

标签: java sql h2

我们在全球多个服务器上使用H2数据库。有一个土耳其客户,我们遇到了一个问题,一些SQL查询停止工作。

CASE WHEN DEF_COUNT.DEF_CNT İS NULL THEN NULL ELSE     CONCAT(İFNULL(DEF_OUTSTANDING.DEF_OUT_CNT,0),' / ',DEF_COUNT.DEF_CNT) END     DEFICIENCY_QUOTA,
CASE WHEN OBS_COUNT.OBS_CNT İS NULL THEN NULL ELSE     CONCAT(İFNULL(OBS_OUTSTANDING.OBS_OUT_CNT,0),' / ',OBS_COUNT.OBS_CNT) END     OBSERVATION_QUOTA,
CASE WHEN REC_COUNT.REC_CNT İS NULL THEN NULL ELSE     CONCAT(İFNULL(REC_OUTSTANDING.REC_OUT_CNT,0),' / ',REC_COUNT.REC_CNT) END     RECOMMENDATION_QUOTA,
CASE WHEN NCR_COUNT.NCR_CNT İS NULL THEN NULL ELSE CONCAT(İFNULL(NCR_OUTSTANDING.NCR_OUT_CNT,0),' / ',NCR_COUNT.NCR_CNT) END NON_CONFORMITY_QUOTA,
CASE WHEN OTHERS_COUNT.OTHERS_CNT İS NULL THEN NULL ELSE CONCAT(İFNULL(OTHERS_OUTSTANDING.OTHERS_OUT_CNT,0),' / ',OTHERS_COUNT.OTHERS_CNT) END OTHERS_QUOTA,

搜索日志文件已经揭示了一个事实,即某些关键字中的Is(字母I)似乎已被土耳其语替换(注意I之上的句号),因此导致语法错误。

我们使用Java实现,并且包是预编译的构建,因此用户无法篡改代码。

这段特殊的代码放在我们的持久层中,一旦用户将系统语言切换为英语,它就会再次正常工作。如前所述,在我们在任何版本之前构建软件包时,类文件是编译器。

H2有可能以某种方式改变整理吗?另请注意,H2位于我们自己提供的硬件上的客户服务器上,因此用户再也没有机会篡改设置。

感谢您的任何指示

1 个答案:

答案 0 :(得分:0)

与此同时,我找到了原因。

这个微粒码代码片段在编译时没有生成,但我的同事程序员把它放在运行时并在此字符串上调用toUpperCase()导致此问题。