今天遇到以下問題,同一sql語句在PLSQL Developer與SQL*PLUS工具中執行結果不一致,sql
sql語句以下數據庫
SELECT 'GROUPHEALTH_SEND_EMAIL' as interface, SUM(decode(se.status, 1, 0, 1)) AS count , 0 AS processed , SUM(decode(se.status, 1, 0, 1)) - 0 AS notprocessed FROM cuan_doic.policy po LEFT JOIN cuan_doic.role ro ON ro.topactualid = po.topactualid AND ro.kind = 'BASICRISKINFOPA' LEFT JOIN cuan_doic.property pr ON pr.parentactualid = ro.actualid AND pr.topactualid = po.topactualid AND pr.kind = 'GROUPTYPE' LEFT JOIN cuan_doic.t_sendemailinfo se ON po.policyno = substr(emailcontent, INSTR(se.emailcontent, '保單號:', 1, 1) + 4, 12) AND se.senderowner = 'UW_WECHAT' WHERE 1 = 1 AND po.productcode = '00130001' AND po.CURRENTFLAG = 'Y' AND pr.value = '$$600062000006' AND po.policyno IS NOT NULL;
在PLSQLDeveloper工具執行結果以下
bash
在SQL*PLUS中執行結果以下
工具
出現這種問題時候,有些老司機會問,是否是鏈接的數據庫不一致,用戶不一致,表的數據是否是一致?編碼
經確認以上都是一致的,只是執行SQL的工具不一致。spa
仔細觀察SQL語句,有以下鏈接條件。 ON po.policyno = substr(emailcontent, INSTR(se.emailcontent, '保單號:', 1, 1) + 4, 12) 這裏有中文字符,是否是這個致使的? 爲證明本身的想法,把中文字符用英文代替。 ON po.policyno = substr(emailcontent, INSTR(se.emailcontent, 'bdh', 1, 1) + 4, 12)
再次執行的結果以下:code
PLSQLDeveloper工具
it
SQL*PLUS工具
字符編碼
此SQL執行形成不一樣結果是由於中文字符致使的。class
因此咱們能夠調整SSH工具的字符編碼與設置NLS_LANG參數,經調整以後,SQLPLUS工具也能輸出正確結果。
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"