MySQLdb-python无法设置字符集的问题

今天写个python脚本从MySQL导数据,导入和导出的两个数据库的编码不一致,需要建立两个数据连接,分别使用不同的字符集,按MySQLdb的文档说明,只需要在MySQLdb.Connect()设置charset参数即可

 

charset

If present, the connection character set will be changed to this character set, if they are not equal. Support for changing the character set requires MySQL-4.1 and later server; if the server is too old, UnsupportedError will be raised. This option implies use_unicode=True, but you can override this with use_unicode=False, though you probably shouldn't.

If not present, the default character set is used.

This must be a keyword parameter.

 

但并没有如愿设置成功,无论我传给charset什么参数,调用character_set_name()总是返回"latin1",因为在其他服务器运行同样的脚步没问题,可以肯定是服务器的配置原因

 

开始以为是MySQLdb-python库的问题,于是重新下载并自己编译,但编译遇到一点问题,因为编译时需要运行mysql_config检测MySQL的配置,但运行mysql_config没有输出任何信息

 

仔细检查一下这台服务器的MySQL相关配置,很是古怪:

 

#rpm -qa|grep mysql

mysqlclient10-3.23.58-4.RHEL4.1

mysql-devel-4.1.22-2.el4_8.4

mysqlclient10-devel-3.23.58-4.RHEL4.1

 

#rpm -qa|grep MySQL

perl-DBD-MySQL-2.9004-3.1

MySQL-shared-standard-4.1.22-0.rhel3

MySQL-python-1.2.1_p2-1.el4.1

MySQL-server-standard-4.1.22-0.rhel3

MySQL-client-standard-4.1.22-0.rhel4

 

mysql开头的几个包是Red Hat Linux自带的包,MySQL开头的几个包是MySQL.com RPM包,混着装一起了,难怪mysql_config无法检测到任何信息,考虑到MySQL-server正在运行,于是快刀斩乱麻,把那几个Red Hat自带的包都清理了(rpm -e xxx),然后安装MySQL.com的RPM包,也顺便把rhel3的MySQL-shared和MySQL-server换成rhel4版本(服务器运行的是RHEL4系统),因为服务器正在运行,所以采用更新的方式(rpm -Uvh xxx.rpm)。

 

谨慎起见,MySQL-server版本保留不变,其他包统一按MySQL-server的版本装上4.1.22的包(顺便说一下,我习惯在http://rpm.pbone.net找软件包),现在看起来整齐多了:

 

#rpm -qa|grep MySQL

perl-DBD-MySQL-2.9004-3.1

MySQL-server-standard-4.1.22-0.rhel4

MySQL-shared-standard-4.1.22-0.rhel4

MySQL-client-standard-4.1.22-0.rhel4

MySQL-devel-standard-4.1.22-0.rhel4

 

这次可以正常编译MySQLdb-python了(需要先安装easy_install, MySQL-python-1.2.3的源代码包已经提供了ez_setup.py脚本,运行python ez_setup.py就可以安装了,然后运行python setup.py build编译MySQL-python, 再运行python setup.py install即可按egg方式把最新编译的MySQLdb-python安装到Python库中)

 

杯具的是,问题依旧,character_set_name()还是返回"latin1"。

 

 

再仔细阅读MySQLdb-python的文档,里面关于MySQL的要求提到:

 

* MySQL.com RPM packages:

 

    - MySQL-devel to compile

 

    - MySQL-shared if you want to use their shared

      library. Otherwise you'll get a statically-linked module,

      which may or may not be what you want.

 

    - MySQL-shared to run if you compiled with MySQL-shared installed

 

这里并没有提到版本的要求,抱着死马当活马医的态度,把MySQL-devel和MySQL-client两个包更新到较新的版本(谨慎一点,数据库还是保留了原来的4.1.22版本,顺便提一下,rpm的更新方式确实比较强大,版本跳跃较大的情况下更新起来也很顺利),现在几个MySQL的包安装如下:

 

#rpm -qa|grep MySQL

perl-DBD-MySQL-2.9004-3.1

MySQL-server-standard-4.1.22-0.rhel4

MySQL-shared-standard-4.1.22-0.rhel4

MySQL-client-community-5.1.56-1.rhel4

MySQL-devel-community-5.1.56-1.rhel4

 

问题居然解决了,看来MySQLdb-python对MySQL包的版本还是有一定要求的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值