我在用
pyodbc 3.0.3版
蟒蛇2.7.12
GNU/Linux 4.4.0-59-通用x86_64
Ubuntu16.04.1LTS(Xenial Xeros公司)
unixODBC 2.3.1版
ODBC 5.3(w)驱动程序
当试图在连接字符串中传递Unicode数据库名称时,我得到错误
提供了Unicode连接字符串,但驱动程序没有Unicode连接函数
我的代码是这样的

# -*- 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')

当我运行此程序时,出现以下错误
错误=('HY000,u“[HY000][unixODBC][MySQL][ODBC 5.3(w)Driver]未知数据库'\xe0\xa4\xa1\xe0\xa4\xbe\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa5\x87\xe0\xa4\xb8'(1049)(SQLDriverConnect)')

最佳答案

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

# -*- 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
उदाहरण

关于mysql - pyodbc + MySQL ODBC无法处理Unicode数据库名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48879928/

10-12 17:16