ByteFX.Data 是 MySQL 的 .Net Data Provider, 同時提供有 mono 與 Microsoft.Net 的版本(微軟版本好像叫做 Connector/.Net).
這兩天在試著用 mono 與 ByteFX.Data 來存取 MySQL 資料庫.
但卻發現中文的字串在存入資料庫之後,全部都變成問號了.
原本以為是我編碼的處置或設定有問題,在經過 Trace mono 與 ByteFX.Data 的 source code 之後,才發現並不是.
我開始懷疑是 MySQL 的問題,我首先去問 Google 大神.
Google 大神告訴我,MySQL 在 4.0 以前並不支援 unicode, 資料庫預設的編碼是 latin1.
ok, 那麼為什麼使用 MediaWiki 或是一些 blog 卻可以存入 unicode 的字串??
又稍稍的 Trace 了 MediaWiki 的 source code, 並無驚人之處,也沒有什麼特別的處理,純粹就是 insert, update 而已.
最後我再回頭看 ByteFX.Data 的 source code, 終於找到問題所在.
ByteFX.Data 在丟封包到 MySQL 之前,會先依據 MySQL 的 encoding 進行編碼.
所以不管怎麼樣,我在 client 怎麼轉碼,到最後 ByteFX.Data 都會轉成 latin1,再進行存入.
是故,可能的解法如下:
1. 升級 MySQL 到 4.0 以後的版本.
2. 在丟資料庫之前,先把字串轉為 byte[], 如果是 byte[], ByteFX.Data 就不會進行轉碼,而直接存入. 但這樣在取出資料的時候,還需要再作一次工,將 byte[] 轉回 string.
解法 2 相當費事,而且以後如果要更換資料庫的時候,又會再受到一次衝擊.
看來解法 1 才是王道. 但是,懶得升級說… =_=
在 .Net 指定 proxy 的方法
其實只要在 Machine.config (也就是 xxx.exe.config) 裡面指定就可以了.
範例如下:
<configuration>
<system.net>
<defaultProxy>
<proxy
proxyaddress = “http://proxyserver:80”
bypassonlocal = “true”
/>
</defaultProxy>
</system.net>
</configuration>
此方法, .Net 與 mono 均適用.
參考資料:
*dotnetJiNi.com – Blogs @ Jignesh Desai
峰銘兄結婚了
又中了一個莫名奇妙的二獎
今天中獎了
真是令人喜出望外啊…
可惜….不是真的.
前兩星期,接到電話是作問券調查
居然是作手機調查,說我們公司有作手機 (見鬼,我自己在公司都不知道公司有作手機),所以需要做一些手機使用的調查…
哈拉半天,給他一個假名字,就掛掉,不以為意
上星期又打電話來,說要寄小贈品,萊爾富禮券 (萊爾富有禮券嗎??不曾聽過)
並且說星期二,也就是昨天,好像在淡水捷運站吧,有抽獎晚會活動.
老樣子,又給他同一個假名字跟假地址.
今天居然就打電話來說中二獎了, 120 萬.
Oh! My God. 買彩券跟統一發票都沒這麼好運.
他哈啦了八分鐘,這中間,我的話裡完全沒興奮的感覺,他應該也心裡有數吧.
最後我丟下一句,我不要.
僅此紀念一下,我曾經中過 120 萬.
The LINQ Project(心得)
懶得把 LINQ 裝起來試….
目前只把 LINQ 與 DLINQ 的 overview 看完而已…
這邊做一個簡單的說明
LINQ ,實作類似 SQL Query 的語法來操作 collection
DLINQ, 解決 Relational DB 與 collection 之間的轉換與對應.
XLINQ, 解決 XML 文件與 collection 之間的轉換與對應.
VFP, 以 SQL Query 直接操作工作區或 Relational DB
看出 LINQ 與 VFP 的不同了嗎??
VFP 的確很強大,已經把 Query 資料庫的技術發揮到極致,但缺點是很難對應到物件導向世界,物件導向的世界裡面一切都是物件,只有 class / object, 而沒有 database. 很多同類的物件在一起,是 collection, 是 container, 而不是 database.
LINQ 則是直接對 collection 操作.
目前很多人對 DLINQ 頗有微詞的地方,是在於 DLINQ 使用了 attribute 去為 class 的 member 貼上資訊,在與 Relational DB 對應的時候,就依照這些 attribute 來做對應.這樣會使得相依性過高.
這部份,我也不知道怎麼樣會是比較好,但 nHibernate 看起來是一個不錯的選擇.
其他可以參考的開源ORM專案:
*Gentle.NET
*iBatis
*nHibernate
喝酒的小遊戲
昨天和志成兄聊喝酒的一些事,得知了一些小遊戲,可以助興.
遊戲1:
取五顆骰子,玩法類似十三支(梭哈),每人輪流骰一次,比大小.
骰出去以後,一般有下列組合
三條, 順子, full-house, four-king, five-king, pair, 烏龍(沒) 等等.
大小的順序則是
five-king > four-king > full-house > 三條 > 順子 > pair > 烏龍
基本上就是最輸的人喝.如果骰到烏龍就直接喝(這個機率實在很低)
遊戲2:
取兩顆骰子,中間放一公杯,大家輪流骰,以點數的加總來決定加酒,減酒,喝
6 點代表回轉,本來順時鐘,則改為逆時鐘;反之亦然.
7 點代表往公杯添酒
8 點代表可以減少公杯的酒
9 點代表喝!!把公杯的酒全都喝完!!!
記得還有別的點數代表別的意義,但我忘了.
這個遊戲光用聽的就知道很刺激,你不知道會害到誰,而中獎的時候,必須把酒喝完.
遊戲3:
基本上是數字拳的變形,每人出一手,然後規則很類似數字拳.
假設有五人,那麼總數就是二十五,猜中大家出的總數者的下家喝.
例如,有 A,B,C,D,E 五人依序排列,A 說十五,而他也猜中了,那麼它的下家,B,就得喝.
這個遊戲比較公平一些,機率是隨機性的.
但志成兄說他的同事有一次有如神助,連續猜中八次,所以他的下家,剛好是他老闆,就喝了八杯高梁 @_@”
真猛啊…
電話
我是個不喜歡打電話也不喜歡接電話的人
不知道我的朋友之中有沒有人發現這件事情…
基本上我最討厭在這幾種狀況下聽到手機響起:
1. 騎車的時候,因為這時候我必須把車停下來,再把安全帽脫掉,才能接.可我通常又不想停車接電話,那很麻煩而且很危險.紅燈的時候,我可以看到是誰打來的,我可以選擇待會靠邊停車,再打過去.如果沒有顯示,又一直打,我會開始覺得很X,心情就會變超差.
2. 洗澡的時候,主要原因是我不喜歡濕淋淋地出來接電話,這樣會把地板弄濕.拖地的人都會比較愛惜地面的清潔,而我就是家裡拖地的人.
3. 自得其樂的時候,嗯,這蠻難定義,總之就是我一個人心情好的時候.這時候若有電話響起,會驚嚇到我,心情自然就差.
4. 在我就寢時間以後,X的,這根本就是擾人清夢.
照這麼看起來,根本就不太有適當的時機打電話給我.
也正因為如此,依照”已所不欲,勿施於人”的精神,我也就不太想打電話給別人.
這也就是我的朋友很少接到我電話的原因.
早年有很瘋狂的構想,我希望我所有的朋友都用 IM 或 e-mail 來溝通.
事實上我也這麼假設,但是,這是不可能的!
並不是每個人都跟我一樣是個怪胎,喜歡掛在網路上.
過了這許多年,我也早就看開,該打電話的,還是要打.
該接的時候,還是要接,不過最好是有來電顯示.
否則的話,別怪我…
The LINQ Project(補)
剛剛用 Google 新推出的 Google blog search 去找
發現了一大堆…
http://www.google.com/blogsearch?hl=en&q=LINQ&btnG=Search+Blogs&filter=0&sa=N&start=10
這篇文章的標題:Project LINQ – Can it be done in VFP?
還蠻吸引我的…
果然裡面又批了微軟一頓
還寫了一個程序”Visual FoxPro Object-Oriented SQL (VOSQL)”來證明 VFP 的強大.
其他參考資料:
*Linq and C# 3.0
*Language Integrated Query (LINQ) feedback
*Project LINQ and XML – Some reflections
Another, c# 3.0 對 functional programming 的新寫法
*Functional programming in C# – Reloaded!
blog search
Google 已經下手做了,好樣的,網址在這: http://www.google.com/blogsearch
試用了一下,還不錯用啊,可以找到蠻多我寫的東西啊~~(竊喜…)
相關報導:
The LINQ Project
昨天在微軟那兒逛到的新東西,本想搶先介紹的,可是還沒看完只好作罷.
沒想到今天就已經有人介紹了…
LINQ: a post-modern revolution in software development
預覽.NET 3.0未來版本
以下的範例對 VFP developer 來說,可能會發出會心的一笑.
Northwind db = new Northwind(“c:\\northwind\\northwnd.mdf”);
var q =
from c in db.Customers
where c.City == “London”
select c;
foreach (var cust in q)
Console.WriteLine(“id = {0}, City = {1}”,cust.CustomerID, cust.City);
這跟 VFP 的
select c.* from Customers c where c.City==”London” into array q
有什麼不一樣呢??
接下來得找一些時間裝起來研究一下.
參考資料:
*The LINQ Project
*Samples
