我正在尝试从 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 位字符,您将得到字符串“PALPCITAOI”。交换字符对(1 和 2、3 和 4 等)会生成“APPLICATIO”(缺少“N”)。据推测,它交换了 N 和空字符,导致缺少 N(假设以空字符结尾的字符串)。
如何正确获取表名?
这在 Python 2.4、PyODBC 2.1 和 MySQL 5.0.22 下运行。
最佳答案
将 CHARSET=UTF8 添加到连接字符串有效,我现在可以启动并运行应用程序。例如:
改变
cnxn = pyodbc.connect('DSN=localhost')
到
cnxn = pyodbc.connect('DSN=localhost;CHARSET=UTF8')
谢谢 Thomas 为我指明了正确的方向。升级到更高版本的 PyODBC 也可能有效。
关于python - PyODBC 输出不正确的 UTF-16,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9911662/