【发布时间】:2012-04-12 06:58:04
【问题描述】:
我正在尝试从 MySQL 数据库中提取表名列表。相关部分代码如下:
conn = pyodbc.connect('...')
cursor = conn.cursor()
for table in cursor.tables():
print table.table_name
对于每张桌子,它都会打印一堆乱码(菱形中的方框和问号)。使用repr(table.table_name) 打印:
u'\U00500041\U004c0050\U00430049\U00540041\U004f0049'
对于名为“APPLICATION”的表。
如果将每个 32 位字符视为两个 16 位字符,则会得到字符串“PALPCTAOI”。交换字符对(1 和 2、3 和 4 等)会产生“APPLICATIO”(缺少“N”)。据推测,它交换了 N 和空字符,导致缺少 N(假设以空字符结尾的字符串)。
如何正确获取表名?
这是在 Python 2.4、PyODBC 2.1 和 MySQL 5.0.22 下运行的。
【问题讨论】:
-
看起来像this bug。尝试使用更新版本的 PyODBC。
-
我找不到更新的 32 位版本的 PyODBC for Linux (CENTOS 5.1),但我在这里找到了源代码 http://code.google.com/p/pyodbc/downloads/list。有谁知道我在哪里可以找到 PyODBC 的 32 位 RPM 的更高版本?
-
@Thomas K,我尝试将 CHARSET=UTF8 添加到我的连接字符串中,例如:
cnxn = pyodbc.connect('DSN=localhost;CHARSET=UTF8'),这可以解决其中一个问题。感谢您的帮助!
标签: python mysql unicode pyodbc