MySQL bug? No, it’s a feature.

使用C#與MySQL時, 將資料加入一個DataSet, 發生錯誤訊息

其他資訊: 無法辨認的 Guid 格式。

問題是我根本沒有用GUID啊! 原始程式碼是這樣

而sql只是個簡單的 select * from table

修改SQL敘述, 加 order 或是欄位名稱都沒用.

Google 了一段時間, 發現這篇文章:

Bug #60945 Unwanted GUID conversion that causes Unrecognized Guid format exception

最後面有人說了

[2 May 2011 16:59] Reggie Burnett
No it is not strange behavior at all. If the string has a length of 36 then it tries to convert it to a GUID. A zero length string is invalid for a GUID where a string with length 37 is treated as simply a string value. We chose to declare char(36) as always containing guids. If your column can contain nulls, I suggest you use NULL instead of ” to represent that. If the column is not containing guids, then use char(37) or some other length.

他說這不是bug, 意思是如果有個字串的長度是36, 會自動轉成GUID….

我在處理的那個表格的確有個欄位, 它的長度是36, 而是內容是空的.

個人猜測, 就是這個欄位導致問題發生, 實驗一下, 把它的長度改成37之後就沒事了….

照他說的改成NULL, 錯誤訊息變成

其他資訊: GUID 必須包含具有 4 個虛線的 32 個數字 (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。

 

另一個解決方法是, 把欄位的資料型別從CHAR改為VARCHAR就可以了, 我想大概大部份人都用VARCHAR所以沒發生這種問題吧.

還我一個小時來啊!!!!

 

結論:CHAR型態且長度為36的欄位會被轉換為GUID來表示.

One comment

Leave a Reply

你的電子郵件位址並不會被公開。 必要欄位標記為 *