2008/09/25

iconv 與 NULL

今天在處理一個文字檔匯入的工作,遇到了 iconv 與 NULL 的小狀況,值得留意一下。

由於網頁是 utf-8,而匯入檔是 big5,因此利用 iconv 來做編碼轉換:

$name = iconv('big5', 'utf-8', $name);

這是再標準不過的寫法了。

但是實際執行匯入時,資料有四萬多筆,卻只匯入了一萬多筆就停了。
打開 log 瞧瞧,發現 MySQL 有錯誤訊息:

Column 'name' cannot be null

原來是有的資料 iconv 轉不出來,就回傳 false,然後欄位 name 又設定不可為 NULL,因此 MySQL 就回傳錯誤訊息。

本來想說,把欄位 name 設定成可接受 NULL 就好,
但這樣又會影響到其他程式,如果其他程式沒有考慮到會有 NULL 的狀況,可能會造成錯誤。
因此最好的做法就是改變匯入時的寫法,遇到 false 就賦予空值,多個小步驟就能解決這個問題。

$name = iconv('big5', 'utf-8', $name);
$name = ($name) ? $name : '';

沒有留言:

張貼留言