pyodbc + MySQL ODBC 无法处理 Unicode 数据库名称
pyodbc + MySQL ODBC cannot deal with Unicode database name
我正在使用
- 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 数据库名称时出现错误
A Unicode connection string was supplied but the driver does not have a Unicode connect function
我的代码是这样的
# -*- 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) Driver]Unknown database '\xe0\xa4\xa1\xe0\xa4\xbe\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa5\x87\xe0\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
उदाहरण
我正在使用
- 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 数据库名称时出现错误
A Unicode connection string was supplied but the driver does not have a Unicode connect function
我的代码是这样的
# -*- 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) Driver]Unknown database '\xe0\xa4\xa1\xe0\xa4\xbe\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa5\x87\xe0\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
उदाहरण