近准備把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服務器作者“宇內流雲”和網友“斌”的大力支持,在他們的幫助下我才成功!