python pymssql模块连接sql2005服务器,无法查询特殊符号,比如直径符号Φ

新手上路,请多包涵

金蝶K3数据库,数据编码检测是GBK

其中一个规格字段中含有直径符号Φ

图片描述

这时候使用9.2作为查询条件是可以正常显示的,换符号查询就无法查询了。

图片描述

这个符号并不是sql自定义的特殊符号,其实μ ,Ω 都无法查询到任何信息。
使用sqlserver 查询命令测试是可以直接查询的。
图片描述

到此,看了很多文章,总觉得应该是编码问题,就是不知道该怎么处理,请会的人指个方向。

阅读 3.8k
2 个回答

pymssql/src/_mssql.pyx第27行DEF PYMSSQL_DEBUG = 1设置为调试模式,打印出实际的sql语句
第1212行query_string_bytes = ensure_bytes(query_string, self.charset) # For Python 3, we need to convert unicode to byte strings 看看1215行输出的log你的Φ字符变成什么了

>>> a = 'select * from Φ'
>>> ensure_bytes(a, 'gbk')
b'select * from \xa6\xb5'
>>> ensure_bytes(a, 'utf-8').decode('gbk')
'select * from 桅'
>>> ensure_bytes(a, 'gbk').decode('gbk')
'select * from Φ'

我估计是这个问题self.charset可能是'utf-8' 先看看你的输出吧

你说的DEBUG模式,我一直没有找到,也不知道怎么弄。但是根据你的提示,我觉得Φ,这个符号既然无法在GBK字符集下正确的传入SQL servers,我就直接取消了charset选项,结果可以查询,返回的结果都是乱码。那只能想办法解决返回的结果了.
图片描述

只能忽略转换的错误了,但是符号也无法显示了,请高手再支个招。


在水木中找到答案

http://stackoverflow.com/ques...

总之就是这库处理编码有bug

输入sql语句用unicode没问题,输出值会变成一个挂着unicode名义的byte string

先用latin1编码成byte string再gbk decode就行

另外后来试了一下用pyodbc连mssql没这破问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏