2017年4月21日 星期五

[MySQL]MySQL 5.7 inet_aton參數不允許空字串

  話說把一個資料蒐集的DB從Percona 5.6升級到5.7,結果用LOAD DATA INFILE的入庫腳本幾乎全部失敗,顯示如下的錯誤
Incorrect string value: '''' for function inet_aton

  因為來源資料有ip,所以用inet_aton轉換成整數存入,都運作好幾個月的腳本怎麼會升級後出錯呢?而且它都是顯示第一行出錯,我怎麼看第一行都是對的@@

  後來嘗試了一下inet_aton在5.6與5.7的差異
  各位猜猜看,下面哪個會出錯?
select inet_aton(null);
select inet_aton(0);
select inet_aton('');


  在5.6,都不會錯

  在5.7,最後那個會告警,如果用在Insert會失敗的

  所以在5.7 inet_aton的參數可為null,為0,就是不能是空字串''喔

  那來源資料欄位值為空,用LOAD DATA INFILE入庫,空的資料理應為null ? 用inet_aton應該不會出錯啊!問題在於LOAD DATA INFILE處理空資料或是缺漏欄位的會直接更新為空字串'',所以才會出錯啊,最後我是用if判斷空字串時轉成0處理掉了
Set WanIp=INET_ATON(if(@WanIp='',0,@Wanip))

0 意見:

張貼留言