PYODBC MySQL ODBC无法处理Unicode数据库名称



我正在使用

  • pyodbc 3.0.3
  • Python 2.7.12
  • gnu/linux 4.4.0-59基因x86_64
  • Ubuntu 16.04.1 LTS(Xenial Xerus(
  • unixODBC 2.3.1
  • ODBC 5.3(w(驱动程序

尝试传递连接字符串中的Unicode数据库名称时,我会得到错误

提供了一个Unicode连接字符串,但驱动程序没有Unicode Connect函数

我的代码看起来像

# -*- coding: utf-8 -*-
import pyodbc
dbname = u"डाटाबेस"
cstring = "DRIVER={MySQL};SERVER=192.168.8.25;PORT=3306;DATABASE="+dbname+";UID=root;PWD=root;CHARSET=utf8;" 
                                                                          "use_unicode=1"
connect = pyodbc.connect(cstring)

编辑1:

我已将PYODBC更新为4.0.21版本。上述错误出现了,但遇到了另一个问题

import pyodbc
dbname = u"डाटाबेस"
cstring = "DRIVER={MySQL};SERVER=192.168.2.243;PORT=3306;DATABASE="+dbname+";UID=root;PWD=support@immune;CHARSET=utf8;" 
                                                                       "use_unicode=1"
connect = pyodbc.connect(cstring, encoding='utf-8')

当我运行此操作时,我会遵循错误

error =('hy000',u" [hy000] [unixodbc] [mysql] [odbc 5.3(w(驱动程序]未知数据库' xe0 xa4 xa4 xa1 xe0 xa4 xa4 xa4 xa4 xbe xbe xe0 xe0 xe0 xa4 xbe xe0 xa4 xac xe0 xa5 x87 x87 xe0 xa4 xa4 xb8'(1049((sqldriverConnect(

我能够通过从connect调用中删除encoding='utf-8'参数来重现您的问题并避免它。我的测试代码

# -*- coding: utf-8 -*-
import pyodbc
import sys
print("Python version: " + sys.version.replace("n", ""))
print("pyodbc version: " + pyodbc.version)
cnxn_str = (
    u"Driver=MySQL;"
    u"Server=192.168.1.144;"
    u"Port=3307;"
    u"Database=डाटाबेस;"
    u"UID=root;PWD=whatever;"
)
cnxn = pyodbc.connect(cnxn_str)
print("driver name: " + cnxn.getinfo(pyodbc.SQL_DRIVER_NAME))
print("driver version: " + cnxn.getinfo(pyodbc.SQL_DRIVER_VER))
crsr = cnxn.cursor()
print(crsr.execute("SELECT txt FROM table1 WHERE id = 1").fetchval())
cnxn.close()

生产

Python version: 2.7.12 (default, Dec  4 2017, 14:50:18) [GCC 5.4.0 20160609]
pyodbc version: 4.0.21
driver name: libmyodbc5w.so
driver version: 05.03.0010
उदाहरण

最新更新