我正在尝试从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和null字符,导致缺少N(假设字符串以null结尾)。
怎样才能正确地得到表名呢?
它在Python2.4、PyODBC 2.1和MySQL 5.0.22下运行。
发布于 2012-04-03 04:11:11
向连接字符串添加CHARSET=UTF8起作用了,现在我已经启动并运行了应用程序。例如:
变化
cnxn = pyodbc.connect('DSN=localhost')
至
cnxn = pyodbc.connect('DSN=localhost;CHARSET=UTF8')
谢谢你,托马斯,给我指了个正确的方向。升级到更高版本的PyODBC也可以。
发布于 2013-05-05 02:26:44
这是一个已知问题,已在pyodbc 2.1.8中修复:
https://code.google.com/p/pyodbc/issues/detail?id=78&can=1&q=UTF-16
不幸的是,对于Ubuntu LTS用户来说,精准穿山甲的可用版本是2.1.7,这个问题仍然存在。如果你想继续使用LTS,我已经向后移植了pyodbc 3.0.6 -你可以在这里找到它:
https://stackoverflow.com/questions/9911662
复制相似问题