近準備把PDF.NET架構的開源項目“超市管理系統”移植到Linux上跑(示範地址:http://221.123.142.196),使用Jexus伺服器和MySQL資料庫,相對使用SQLite而言,用MySQL問題比較多,但最後還是一一解決了,先總結如下:
1,MySQL驅動:
有人說在mono 下跑MySQL需要老點的MySQL驅動,我實驗發現跟此無關,我用的驅動 MySQL.Data.dll 版本是 6.3.6,在mono 3.0.3 下跑是沒有問題的。
2,MySQL服務的版本:
這個有點關係,我測試了2個MySQL服務版本,一個5.0.95,一個是 5.5.28 ,前者出錯的時候,換到後者的資料庫又發現沒有問題了,看來版本高點好。
3,MySQL的編碼問題:
為了使用中文,資料庫所有語言設定都成UTF-8,或者在連接字串設定編碼(CharSet=utf8) :
---------
server=ip;User Id=uid;password=pwd;CharSet=utf8;DataBase=SuperMarket;Allow Zero Datetime=True
----------
4,MySQL日期欄位類型:
其實這個問題跟網站的“語言文化設定”有關,在拼接SQL的時候,直接DateTime.ToString() 的時候會有不同的格式,而MySQL的語言文化設定跟網站不一樣,即會出問題。
另外,有時日期欄位只儲存了日期部分,沒有儲存時間部分,或者時間日期欄位為空白,會導致查詢錯誤,
比如網站語言文化設定是 en-US,那麼日期變數在SQL拼接的時候是這個樣子的: '2013-3-2 10:10:1 AM' ,插入資料的時候不會報錯,但MySQL無法查詢出來,查詢報錯,這時候可以在連接字串中增加“Allow Zero Datetime=True”設定,這樣查詢不報錯了,但是日期欄位的值也是空了。
最佳解決方案是使用Ado.net 的參數化查詢。
PS:PDF.NET架構的OQL,資料控制項都是參數化查詢的。
5,Web.config檔案有關語言文化的設定:
由於mono 3.0.x 目前還不是正式版本,所以它的ASP.NET中語言文化只支援 en-US,而通常情況下預設的是當前系統的語言文化設定,比如zn-CH,但架構又不支援,於是MySQL無法獲知當前要使用的設定,報錯。
具體設定方法是設定 uiCulture=“en-US”,在
<system.web> <globalization culture="zh-CN" uiCulture="en-US"/>... ...</system.web>
或者另外一個方案,就是使用當前穩定版本的 mono 2.10.8
6,MySQL資料管理:
可以使用Apache的PhpAdmin來管理MySQL,但還得裝apache 的PHP運行時,這裡推薦一款CS方式的資料庫管理軟體,PDF.NET整合開發工具,很方便管理MySQL的,可以執行建庫等操作。
(該工具:http://ft.codeplex.com/releases/view/65308 )
------------------------------------------------------------------
PS:為了移植到MySQL,感謝Jexus伺服器作者“宇內流雲”和網友“斌”的大力支援,在他們的協助下我才成功!