Python:在SQL中读取ø,æ和å选择

时间:2017-04-27 09:15:18

标签: python sql oracle python-2.7 pyodbc

我试过在互联网上查找我的问题的解决方案。问题是,我甚至不知道如何正确地制定这个问题,因为这不是我的专业领域。尽管如此:

我正在使用Python进行SQL调用。调用本身不是问题,我在Toad中尝试了相同的查询 - 它的工作方式应该如此。我正在选择一个包含丹麦字符“ø”的名称的表格。遗憾的是,当我发出数据请求时,无法读取这些特殊字符。现在我想我需要在连接中添加一个选项,告诉它使用UTF-8,所以我搜索了一下,发现:

os.environ["NLS_LANG"] = ".UTF8"

这样可行,问题只是删除了最后一个字符。 例如:

我想阅读'REFSHALEØEN HOLD'。如果没有选项(上面一行代码),我会得到'REFSHALE?EN HOLD',我得到'REFSHALE\xc3\x98EN HOL'。请注意该值中丢弃的D

  • Describe table州列定义为VARCHAR2 (16 Char)
  • cursor.description返回(COLUMNNAME, <type 'str'>, None, 16, 16, 0, False)
  • 特定行的值为'REFSHALE\xd8EN HOLD'

我该如何解决这个问题?

这与字节和编码有关吗?我正在连接到Oracle数据库,以防这很重要。希望这是足够的信息。

我的连接功能如下:

def SQLSelect(query):
    connString  = "Driver={Microsoft ODBC for Oracle};Server=" +  dbInst + ';Uid=' + schema + ';Pwd=' + passwd + ";"

    os.environ["NLS_LANG"] = ".UTF8"

    conn = pyodbc.connect(connString)
    data = pd.read_sql(query, conn)
    conn.close()
return data

我的问题是它显示为“ø,æ,å”,但包含任何这些字母的字符串减少了一个字符。 为什么会发生这种情况?

0 个答案:

没有答案