【问题标题】:pyodbc remove unicode stringspyodbc 删除 unicode 字符串
【发布时间】:2013-05-15 12:29:34
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: python pyodbc


    【解决方案1】:

    您无法在连接字符串中处理此问题。 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 中。

    【讨论】:

    • 另外,对于其他需要这个的人。如果你有国际字符并且你使用数据库中的演员,你会得到奇怪的字符,实际的 utf-16/uc-2 字符会丢失。
    • 知道为什么我可以选择一个 nvarchar(255) 字段而不是一个没有指定大小的 nvarchar 吗?我得到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
    猜你喜欢
    • 2016-08-29
    • 1970-01-01
    • 2020-09-03
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多