python - PyODBC 输出不正确的 UTF-16

标签 python mysql unicode pyodbc

我正在尝试从 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/

相关文章:

python - Unicode 到字符串 Python 2

python - GeoDjango:是否有一种开箱即用的方法来生成点簇?

python - 根据条件将一个 python pandas 数据帧列的值替换为另一列的值

mysql - 检索 MySQL 中具有相同列字段的行的 ID

unicode - 竞争对编码和字符集的理解

用于处理 unicode 字符串的 Python 2.7/3 C 模块

Python - 如何访问列表中类中上述类的变量?

python - 运行多个 LinearRegressions 测试时准确度没有增加

用于德语变音符号的 MySQL UTF8 排序规则

php - 从mysql数据库获取普通日期和时间戳之间的值