數據庫編碼問題--PostgreSQL篇(一)

    想將PyFlow做到跨數據庫、跨平台、無關簡繁,在編寫一些模塊這過程盡可能通用。在漢字簡繁轉換過程中因為數據庫編碼問題,數據訪問模塊可能就暫時就不寫成通用模塊了。
pg漢字編碼問題,服務端默認不支持BIG5/GB2312/GBK/GB8030等,創建數據庫或數據庫目錄初始化時不能直接指定字符集名稱為上面字符集,保存漢字可以使用的有SQL_ASCII/UTF-8。

在繼續寫下去時,先說一下訪問pg的方式,pg的接口分ansi和unicode兩種。這樣在字符編碼和驅動方式就會有四種組合。當組合不對時,就可能出現問題,如亂碼、空白等。

SQL_ASCII編碼直接使用漢字分為兩字節字符保存,pg將每一字節當一個字符,當字節值大於127時會當作連續的字符,但連續幾個說不定,文檔沒說 明,但應是2個。這樣就可能造成GB18030字符集某些字符顯示有亂碼問題。同時,使用SQL_ASCII編碼保存的內容不能使用pg轉換為其它字符集 編碼。
UTF-8編碼則使用4字節進行保存,但pg會作為一個整體看待。它的內容可以轉接為任意字符集編碼。

再說回訪問方式。
使用ansi驅動訪問SQL_ASCII數據庫時,pg直接返回保存的內容;訪問UTF-8編碼時,pg會將UTF-8內容轉為客戶端指定或默認的 encoding字符集編碼再返回。返回的結果都是ASCII字節形式,編碼細節需要客戶端處理,這也就是最容易出現亂碼情況。
使用unicode驅動訪問時。SQL_ASCII編碼格式的數據則有問題,因為pg不會將大於127內容轉換為unicode格式,只用空格填充。訪問UTF-8編碼數據庫時,則正常返回unicode格式內容,只要系統支持unicode應都不會出現亂碼。

另外,還有另外一半未講完。就是寫入數據庫,這個待測試後再寫。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值