pyodbc删除unicode字符串

use*_*619 3 python pyodbc

我正在使用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
Run Code Online (Sandbox Code Playgroud)

dkl*_*mer 6

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

您遇到的整体问题是数据在数据库中是unicode.该列的数据类型是nvarchar,它是一个扩展(UTF-16 ...可能是Windows中的UC-2,不记得)数据类型,包括国际数据字符.

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

SELECT CAST(fieldname AS VARCHAR) AS fieldname
Run Code Online (Sandbox Code Playgroud)

或者在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')
Run Code Online (Sandbox Code Playgroud)

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

  • 此外,对于其他需要此功能的人.如果您有国际字符并且在数据库中使用强制转换,您将获得奇怪的字符,并且实际的utf-16/uc-2字符将丢失. (3认同)
  • 知道为什么我可以选择nvarchar(255)字段,但不能选择未指定大小的nvarchar吗?我收到“仅使用Unicode排序规则的Unicode数据,或者无法使用DB-Library(例如ISQL)或ODBC 3.7或更早版本将ntext数据发送给客户端” (2认同)