pyodbc删除unicode字符串


问题内容

我正在使用pyodbc连接sqlserver,下面是我的连接字符串。.一切正常,但结果以Unicode字符串返回。.我在连接字符串中有CHARSET =
UTF8,但仍以Unicode字符串形式返回?

有什么方法可以使用连接参数本身来限制它吗?

我不想调用额外的函数将我的unicode转换为普通字符串。

import pyodbc as p

connstr= 'DRIVER={SQL Server};SERVER=USERNAME\SQLEXPRESS;DATABASE=TEST;Trusted_Connection=yes;unicode_results=True;CHARSET=UTF8'
conn = p.connect(connstr)
print conn
cursor = conn.cursor()
result = cursor.execute("select * from employee1")
for each in result:
    print each

问题答案:

您无法在连接字符串中处理此问题。SQL Server的odbc连接设置中没有CHARSET属性,因此对您没有任何好处。

您遇到的总体问题是数据库中的数据是Unicode。该列的数据类型为nvarchar,它是扩展的(UTF-16
…在Windows中可能是UC-2,不记得了)数据类型以包含国际数据字符。

您的选择是通过选择查询中的强制转换来转换数据,例如:

SELECT CAST(fieldname AS VARCHAR) AS fieldname

或将其转换为python,例如:

# to utf-8
row.fieldname.encode('utf8')

# to ascii, ignore non-utf-8 characters
row.fieldname.encode('ascii', 'ignore')

# to ascii, replace non-utf-8 characters with ?
row.fieldname.encode('ascii', 'replace')

如果不需要国际字符,则可以将数据存储在varchar中,而不是nvarchar中。