Friday, November 25, 2005

Oh...UNICODE

我真是完全死了(totally dead)…

sqlite是小型資料庫,如果你的資料量不太多,但是又必須要有搜尋的功能,並且你沒上過一些如:「資料庫」那種自己實做資料庫系統的課(利用有效率存取檔案,模擬真的資料庫),那sqlite是個不錯的選擇。
如同JDBC一樣,python的資料庫存取有很多不同家的driver,為了維持使用上的一致性,python的資料庫API標準由pep-0249規範。team leader 選擇了pysqlite作為存取sqlite的介面。

sqlite把text視為unicode,這點應該不錯吧,因應目前的潮流。但是python若未特別指定,使用的資料型態是ascii。這真是令人覺得頭痛。

在DB裡的資料如下:
1,測試囉,3939889
2,非英文,9kdl089

使用pysqlite存取:
>>>import pysqlite2.dbapi2 as sqlite
>>>con = sqlite.connect('test.db')
>>>cur = con.cursor()
>>>cur.execute('SELECT * from mytest')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
UnicodeDecodeError: 'utf8' codec can't decode byte 0xaa in position 0: unexpected code byte

ASCII真是了不起!

現在只能用低級解法:
1.存進資料庫時候,將字串以ISO8859-1編碼
2.自己寫轉換型態的method,註冊到pysqlite(效能會減低很多,除非用c寫,才有可能效能不減少太多)

No comments: