记一个空格引发的血案

  今天一个数据的同事找到我,说他有一段怎么看都很正常也很简单的SQL,就是一直报错,研究了一天了也没搞明白。项目进度紧张,我让他先发我看看。
  环境:FD1.6(psql6.16.2)

1. 原SQL分析

SELECT 

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

  看着没啥问题啊···手动规整了下格式

SELECT
  CASE
    WHEN AA >= 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帮助我修复了错误。那就是特殊字符号的问题了,一旁的长忠提醒我,查下空格?好家伙,怎么还有不是空格得空格:
image
  一百度,全角空格啊···

3.结论

  问题是:敲入了不知名全角空格
  原因是:SQL不支持全角空格
(又水了一篇惭愧)

posted @ 2021-10-21 14:03  沧浪浊兮  阅读(35)  评论(0编辑  收藏  举报