为了账号安全,请及时绑定邮箱和手机立即绑定

使用Python将UTF-8字符串写入MySQL

使用Python将UTF-8字符串写入MySQL

杨__羊羊 2019-12-03 15:58:07
我正在尝试将用户帐户数据从Active Directory推送到我们的MySQL服务器。这可以完美地工作,但是以某种方式最终使字符串显示变音符号和其他特殊字符的编码版本。Active Directory使用以下示例格式返回字符串: M\xc3\xbcller这实际上是UTF-8编码Müller,但是我不想写入Müller数据库M\xc3\xbcller。我尝试使用此行转换字符串,但结果导致数据库中的字符串相同: tempEntry[1] = tempEntry[1].decode("utf-8")如果我print "M\xc3\xbcller".decode("utf-8")在python控制台中运行,则输出正确。有什么方法可以正确插入此字符串吗?对于想要拥有这种确切格式的Web开发人员,我需要这种特定格式,但我不知道为什么他不能直接使用PHP转换字符串。附加信息:我正在使用MySQLdb。表和列的编码为utf8_general_ci
查看完整描述

3 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

假设您正在使用MySQLdb,则在创建连接时需要传递use_unicode = True和charset =“ utf8”。


更新:如果我对测试表运行以下命令,我会得到-


>>> db = MySQLdb.connect(host="localhost", user='root', passwd='passwd', db='sandbox', use_unicode=True, charset="utf8")

>>> c = db.cursor()

>>> c.execute("INSERT INTO last_names VALUES(%s)", (u'M\xfcller', ))

1L

>>> c.execute("SELECT * FROM last_names")

1L

>>> print c.fetchall()

(('M\xc3\xbcller',),)

这是“正确的方法”,字符已正确存储和检索,您的朋友编写php脚本只是在输出时未正确处理编码。


正如Rob所指出的那样,use_unicode和charset的组合对于连接是很冗长的,但是即使对于标准库之外的最有用的python库,我也很自然地产生偏执,所以我尝试明确地使bug易于发现库是否发生了变化。


查看完整回答
反对 回复 2019-12-03
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

import MySQLdb


# connect to the database

db = MySQLdb.connect("****", "****", "****", "****") #don't use charset here


# setup a cursor object using cursor() method

cursor = db.cursor()


cursor.execute("SET NAMES utf8mb4;") #or utf8 or any other charset you want to handle


cursor.execute("SET CHARACTER SET utf8mb4;") #same as above


cursor.execute("SET character_set_connection=utf8mb4;") #same as above


# run a SQL question

cursor.execute("****")


#and make sure the MySQL settings are correct, data too


查看完整回答
反对 回复 2019-12-03
  • 3 回答
  • 0 关注
  • 848 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号