MySQL hardcoding?

John Nagle nagle at animats.com
Mon Apr 21 12:17:08 EDT 2008


marexposed at googlemail.com wrote:
> I've got this error (see the path in last line)
> 
>     db=MySQLdb.connect(host='localhost',use_unicode = True, charset = "Windows-1251",user='root',passwd='12',db='articulos')
>   File "C:\Python24\Lib\site-packages\MySQLdb\__init__.py", line 74, in Connect
>     return Connection(*args, **kwargs)
>   File "C:\Python24\lib\site-packages\MySQLdb\connections.py", line 198, in __init__
>     self.set_character_set(charset)
>   File "C:\Python24\lib\site-packages\MySQLdb\connections.py", line 277, in set_character_set
>     super(Connection, self).set_character_set(charset)
> OperationalError: (2019, "Can't initialize character set Windows-1251 (path: C:\\mysql\\\\share\\charsets\\)")
> 
> The truth of the matter is, MySQL is not installed in that path, but into Program Files.
> I don't know where the hardcoding is, but it is certainly somewhere. Except MySQL is reporting a wrong installation path.
> I haven't found any other topic in the list about this problem.
> 
> I'm using Python 2.4 and latest MySQLdb. Have anyone heard of this issue and how to fix it?
> 
> Thanks a lot.

    Well, for one thing, MySQL doesn't have a character set called 
"Windows-1251", which is an obsolete Cyrillic variant of Windows.
See the list of MySQL character sets at:

"http://dev.mysql.com/doc/refman/5.0/en/charset-charsets.html"

MySQL does have "cp1251", which is apparently the same thing.

    Be aware that in Python, there are really only two character
sets - ASCII and Unicode.  The "upper code page" thing is deprecated,
and you can't do some string operations on characters with values > 128.
It's best to convert input to Unicode, run everything in Python in
Unicode, send to the database in "utf8", and store your data in "utf8".

    You have "use_unicode" set to True.  If you're going to run
the MySQL connection in Unicode, you should use "utf8" talking to the
database, and Unicode strings in Python.  Otherwise, you have to
understand very clearly exactly how both Python and MySQL handle
character sets, and how this changes in Python 2.4, 2.5, and 3.x.

					John Nagle



More information about the Python-list mailing list