我们在全球多个服务器上使用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位于我们自己提供的硬件上的客户服务器上,因此用户再也没有机会篡改设置。
感谢您的任何指示
答案 0 :(得分:0)
与此同时,我找到了原因。
这个微粒码代码片段在编译时没有生成,但我的同事程序员把它放在运行时并在此字符串上调用toUpperCase()导致此问题。