1. 程式人生 > 其它 >記一個空格引發的血案

記一個空格引發的血案

特助字元引起的SQL錯誤;找不到SQL問題?看起來完美無缺的它竟然是因為這個!

  今天一個數據的同事找到我,說他有一段怎麼看都很正常也很簡單的SQL,就是一直報錯,研究了一天了也沒搞明白。專案進度緊張,我讓他先發我看看。
  環境:FD1.6(psql6.16.2)

1. 原SQL分析

SELECT 

casewhenAA >= 1 then 'aaa'
else 'a'
end as tonn
FROM (
select 
coalesce(new_tonnage1,0)::int AA
from ods.new_productmodel
) A

  看著沒啥問題啊···手動規整了下格式

SELECT
  CASE
   WHENAA >= 1 THEN 'aaa'
    ELSE 'a'
  END AS tonn
FROM
  (
    SELECT
      COALESCE (new_tonnage1, 0) :: INT AA
    FROM
      ods.new_productmodel
  ) A

  得,這下更看不出問題了。差分程式碼執行,發現大概率是在case when這裡的問題

2.各平臺現象

  我把SQL放入了navicat\kettle\FR\FT中分別執行,FT竟然可以執行?那這樣看來是驅動的問題?因為我記得唯一的區別是FT資料連線用的FD型別,其他平臺則用的PSQL驅動。不可能,這語句太常見了。
  第二天覆現得時候,又去唯一成功得FT上去看,這次沒成功?!仔細回想,上次在FT上點了"美化SQL"的選項,看來應該是FT幫助我修復了錯誤。那就是特殊字元號的問題了,一旁的長忠提醒我,查下空格?好傢伙,怎麼還有不是空格得空格:

  一百度,全形空格啊···

3.結論

  問題是:敲入了不知名全形空格
  原因是:SQL不支援全形空格


(又水了一篇慚愧)

本文來自部落格園,作者:拼命十三郎,轉載請註明原文連結:https://www.cnblogs.com/shixiu/p/15429375.html