Bug #69631 Connector/Python does not accept Unicode string as a database name
Submitted: 1 Jul 2013 15:58 Modified: 4 Jul 2013 9:42
Reporter: Sadao Hiratsuka Email Updates:
Status: Duplicate Impact on me:
None 
Category:Connector / Python Severity:S3 (Non-critical)
Version:1.0.10 OS:Any
Assigned to: Assigned Account CPU Architecture:Any

[1 Jul 2013 15:58] Sadao Hiratsuka
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'
[4 Jul 2013 9:20] Geert Vanderkelen
Already fixed. :)