Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PYODBC破坏utf8数据(从MYSQL信息_模式数据库读取)_Mysql_Unicode_Character Encoding_Odbc_Pyodbc - Fatal编程技术网

PYODBC破坏utf8数据(从MYSQL信息_模式数据库读取)

PYODBC破坏utf8数据(从MYSQL信息_模式数据库读取),mysql,unicode,character-encoding,odbc,pyodbc,Mysql,Unicode,Character Encoding,Odbc,Pyodbc,编辑: 我彻底修改了这个问题,以反映我对这个问题的更好理解 PYODBC+MYSQL命令用于获取my DB中的所有表名 cursor.execute("select table_name from information_schema.tables where table_schema='mydbname'") 结果是一个unicode字符串列表,每个字符串中每秒省略个字符 information\u模式DB是utf8,尽管我的表名是纯ascii。从我的数据库(拉丁文

编辑: 我彻底修改了这个问题,以反映我对这个问题的更好理解

PYODBC+MYSQL命令用于获取my DB中的所有表名

cursor.execute("select table_name from information_schema.tables where
             table_schema='mydbname'")
结果是一个unicode字符串列表,每个字符串中每秒省略个字符

information\u模式
DB是utf8,尽管我的表名是纯ascii。从我的数据库(拉丁文1)读取数据很好。执行
set character\u set.*=“utf8”
没有帮助

从C++/ODBC测试程序执行相同的查询效果良好

您知道
pyodbc
如何对字符进行编码吗?当使用utf8 DB时,它采用什么编码


我使用UnixODBC、Python2.6.4、pyodbc 2.1.7在Linux上工作,ODBC规范只允许两种编码:ASCII和UCS-2。ODBC驱动程序的任务是将数据库中的任何内容转换为这两个数据库中的一个,但我发现大多数ODBC驱动程序的作者不理解它应该如何工作

执行查询时,pyodbc不要求任何编码。它执行查询,然后向驱动程序询问每个列的数据类型。如果数据类型是Unicode,它将读取缓冲区并将其视为UCS2。如果数据类型是ASCII,它将读取缓冲区并将其视为ASCII


存储格式应该是不相关的。

为什么要对本地MySQL数据库使用ODBC,而不是MySQLdb库?@Daniel:这是一种“遗留”代码,我们刚刚从DB2切换到MySQL。我来看看这个库,它要求数据库是本地的吗?我不确定这种情况是否会一直存在。不,它可以很好地用于远程数据库。我不知道它是否能解决您的问题,但至少会少一个系统。如果您在Windows上工作,您可以尝试使用win32 extensions中的
odbc
模块(已包含在ActiveState发行版中)。@Michal:谢谢,但我在Linux上工作……谢谢!顺便说一句,我通过使用cursor.execute(“set character\u set\u results='latin1')找到了一个解决方法。。但是,如果我使用游标.tables()。