Description:
Connector/Python does not accept Unicode string as a database name.
How to repeat:
$ python -V
Python 2.6.6
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import mysql.connector
connection = mysql.connector.connect(
database=u'scott', user='scott', password='tiger')
connection.close()
$ python cp.py
Traceback (most recent call last):
File "cp.py", line 6, in <module>
database=u'scott', user='scott', password='tiger')
File "/usr/lib/python2.6/site-packages/mysql/connector/__init__.py", line 44, in Connect
return MySQLConnection(*args, **kwargs)
File "/usr/lib/python2.6/site-packages/mysql/connector/connection.py", line 108, in __init__
self.connect(**kwargs)
File "/usr/lib/python2.6/site-packages/mysql/connector/connection.py", line 356, in connect
self._open_connection()
File "/usr/lib/python2.6/site-packages/mysql/connector/connection.py", line 323, in _open_connection
self._ssl)
File "/usr/lib/python2.6/site-packages/mysql/connector/connection.py", line 156, in _do_auth
charset=charset, client_flags=client_flags)
File "/usr/lib/python2.6/site-packages/mysql/connector/protocol.py", line 92, in make_auth
'\x00' * 23 + auth[0] + auth[1] + auth[2]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa2 in position 1: ordinal not in range(128)
Suggested fix:
--- protocol.py_orig 2013-07-02 00:49:28.730544919 +0900
+++ protocol.py 2013-07-02 00:50:19.016888797 +0900
@@ -71,6 +71,8 @@
_password = '\x00'
if db is not None and len(db):
+ if isinstance(db, unicode):
+ db = db.encode('utf8')
_database = db + '\x00'
else:
_database = '\x00'