这篇文章和我在MySQL in Python: UnicodeEncodeError: 'ascii'中的问题是一样的这只是为了澄清事情。
我试图将字符串保存到 MySQL 数据库,但出现错误:
File ".smart.py", line 51, in (number, text, 'smart', 'u')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 25: ordinal not in range(128)
字符串保存在m['Text']
Lala*=#&%@<>_?!:;-'"/()¥¡¿
这是代码片段
risk = m['Text']
msg = risk.encode('utf8')
text = db.escape_string(msg)
sql = "INSERT INTO posts(nmbr, \
msg, tel, sts) \
VALUES ('%s', '%s', '%s', '%s')" % \
(number, text, 'smart', 'u')
如果我尝试注释掉 SQL 查询并输入打印文本,它将打印出 Lala*=#&%@<>_?!:;-' "/()¥¡¿
只有在处理 SQL 时才会遇到该错误。
MySQL 编码设置为 utf8_unicode_ci。 (或者我应该改变这个?)
谢谢。
最佳答案
添加这些参数MySQLdb.connect(..., use_unicode=1,charset="utf8")
。
创建光标
cur = db.cursor()
然后像这样执行:
risk = m['Text']
sql = """INSERT INTO posts(nmbr, msg, tel, sts) \
VALUES (%s, %s, %s, %s)"""
values = (number, risk, 'smart', 'u')
cur.execute(sql,values) #use comma to separate sql and values, this will ensure values are escaped/sanitized
cur.commit()
现在你不需要这两行:
msg = risk.encode('utf8')
text = db.escape_string(msg)
关于python - python 编码中的 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9331010/