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

我正在尝试将用户帐户数据从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


杨__羊羊
浏览 849回答 3
3回答

忽然笑

假设您正在使用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易于发现库是否发生了变化。

梵蒂冈之花

import MySQLdb# connect to the databasedb = MySQLdb.connect("****", "****", "****", "****") #don't use charset here# setup a cursor object using cursor() methodcursor = db.cursor()cursor.execute("SET NAMES utf8mb4;") #or utf8 or any other charset you want to handlecursor.execute("SET CHARACTER SET utf8mb4;") #same as abovecursor.execute("SET character_set_connection=utf8mb4;") #same as above# run a SQL questioncursor.execute("****")#and make sure the MySQL settings are correct, data too
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python