以下的文章介紹的是用MySQL數據庫出現N多問題,我們大家都知道系統用 access數據庫,沒有任何的問題出現,但是隨著數據量不斷的增加,其相關性能下降的很快,但是最起碼,沒有錯。
後台考慮到未來發展,轉移到MySQL數據庫平台,結果一下子就出現了一堆問題。
1. 中文字符不支持。
這個就夠我忙幾個小時了,又是修改my.ini,又是修改鏈接字符串。總算搞好了。
2. 插入時間格式不支持
簡直吐血了。在c#裡,日期含有中文“上午”“下午”,由於MySQL修改支持了中文,插入的時候直接報錯了。
這種低級的問題超級吐血,只好在持久層自己添加一個轉換。
3. 插入的中文突然丟失了一般
測試的時候,突然發現插入的中文沒了一般,英文正常,字段類型是Text。再次吐血,找不到方法之後,最後只好重建MySQL數據庫。
4. 插入BLOb,圖片錯誤。
如果是字符轉化為byte[],沒有問題,如果是文件之類的就錯。估計還是中文字符問題。
只能再次修改持久層,對byte[]進行base64加密。
吐血中!!!!!
5. 這次竟然是官方代碼拋的異常!!!!我靠!!!老大,這個是誰寫的啊!
TABLENAME:POS_SALESORDER
LOG:System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內的位置。
參數名: length
在 System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)
在 MySQL.Data.Types.MySQLString.MySQL.Data.Types.IMySQLValue.WriteValue(MySQLStream stream, Boolean binary, Object val, Int32 length)
在 MySQL.Data.MySQLClient.MySQLParameter.Serialize(MySQLStream stream, Boolean binary)
在 MySQL.Data.MySQLClient.Statement.SerializeParameter(MySQLParameterCollection parameters, MySQLStream stream, String parmName)
在 MySQL.Data.MySQLClient.Statement.BindParameters()
在 MySQL.Data.MySQLClient.PreparableStatement.Execute()
在 MySQL.Data.MySQLClient.MySQLCommand.ExecuteReader(CommandBehavior behavior)
在 MySQL.Data.MySQLClient.MySQLCommand.ExecuteNonQuery()
在 Pixysoft.Framework.Noebe.NoebeCommand.Execute()
救命啊。。什麼原因!!!這次連debug都沒有辦法了。
我估計還有無數的問題在等著我。
開源啊開源,不是我刻意說你。也擺脫你爭氣點。我做軟件也5年多,用.net從來不會被小問題阻礙,可以專心研究算法、框架。可是一搞java,一搞開源的,就無數的小問題。
比如hibernate, tmd,竟然版本升級了,連namespace都變了。 這可以說,直接使網上數以百萬計的hibernate demo code, helloworld變成費碼。對於初學者,這是多麼沉重的打擊。
比如eclipse, 無數的擁護者肯定唾罵我。但是,和vs2005比起來,我寧願面對無數的唾罵,也要支持vs2005。eclipse是有些不錯的功能,但是那個性能。。那個易用性。。。嗨。。一啟動就300m內存。用個智能提示等半天假死。還有很多打包、部署、一大堆問題。不是說ant不好,可是我只是想打個包,讓我寫一堆xml干嘛,而且寫的跟寫代碼一樣,還分拆在不同的目錄。救命。。。比看代碼還累。
後來出了個所謂的maven的,說專門針對部署的,怎麼怎麼好。我們用起來,簡直一個狗屁。只要任意一個版本變動,立刻病毒效應。立刻打包失敗,而且失敗的莫名其妙。我們的工程師也就1、2個人才能解決,比如修改打包配置文件版本號最後2位之類的,其他的都雲裡霧裡。
還有java裡面做界面的,不要跟我說javaswing怎麼樣,最後還不是IBM推出的基於c的SWT,才結束了JAVA的界面噩夢。以上的相關內容就是對用MySQL數據庫相當多問題的介紹,望你能有所收獲。