[Python]Python/PHP 如何查詢 sql server中 NTEXT 類型數據
|
Version
|
Date
|
Creator
|
Description
|
|
|
|
鄭昀
|
草稿
|
繼續閱讀之前,我們假設您熟悉以下知識:
n
????????
Python /?PHP
n
????????
SQL Server 2000 SP4
以上版本的
Microsoft sql server
n
????????
pymssql
n
????????
NTEXT
類型
本文討論了在 Python 中,如果利用 pymssql 來連接 Microsft Sql server 2000 SP4 以上版本數據庫查詢 NTEXT 類型數據,如何成功返回數據。
在PHP中類似問題也可以這么解決。
pymssql - Simple MSSQL Python extension module
,當前我們使用的版本是
pymssql-0.7.4.win32-py2.4.exe
。
您可以遵循后文描述的執行步驟,在此之前,我們先描述一個常見的錯誤現象。
[ 常見錯誤現象 1]
關鍵詞
:
?????
Unicode data in a Unicode-only collation or ntext data
cannot be sent to clients using DB-Library
。
表象 : ????????? 如果你的 sql server 2000 sp4以上版本的 數據庫中有一個字段是 NTEXT 類型,那么當你使用 pymssql 來做查詢的時候,您可能得到如下錯誤:
|
錯誤日志
|
|
MS SQL message: ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. (severity 16)
|
|
_mssql.error: SQL Server message 4004, severity 16, state 1, line 1:
Unicode data in a Unicode-only collation or ntext data cannot be sent
to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier.
|
?
解釋 : ?????????
這是因為我們的 pymssql 使用早期的 ODBC 函數集來獲取數據。而微軟后來引入了 ntext 和 nvarchar 類型,而這是 Microsoft C-library 所不支持的。所以,連 pymssql 的說明檔里也這么建議:
|
注釋
|
|
It's the SQL Server complaining that it doesn't support pure Unicode
via TDS or older versions of ODBC. There's no fix for this error.
A workaround is to change the column type to NVARCHAR (it doesn't
exhibit this behaviour), or plain TEXT.
|
是不是真的要改變你的字段類型了呢?
可行的步驟:
只需要多執行一步即可。
1
:
聲明一句話:
queryTEXTSIZE = str("SET TEXTSIZE 65536")
65536
是我限定要返回
NTEXT
字段數據的最大長度,你可以設置的更大一點,比如
1024000
。
2
:
然后執行這句
sql
語句:
oConn =
_mssql.connect(databaseHost, databaseUserName, databaseUserPwd)
ret = oConn.query(queryTEXTSIZE)
table = oConn.fetch_array()
3
:
然后,聲明你的原來的那個獲取
NTEXT
字段的
sql
語句如下所示:
|
修改的
sql
語句
|
|
SELECT cast ( field_name AS TEXT ) AS field_name
|
這個
field_name
所代表的字段本來類型是
NTEXT
,這里我們
CAST
它為
TEXT
,這就是一個技巧
。
4
:
接下來執行你的這個
sql
語句即可:
???
ret = oConn.query(query)
table = oConn.fetch_array()
[
參考資料
]
1
:《
What means "Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library"?
》
?
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1409306
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

