mysql python编码
-
27-10-2019 - |
题
这篇文章是同样与我的问题 MySQL在蟒蛇:UnicodeEncodeError:'ascii' 这只是清楚的东西。
我试图保存一串一个数据库,但我得到一个错误:
文件"。smart.py"51行, (编号,案文,"智能",'u')
UnicodeDecodeError:'ascii'编不能解字节0xc2在的位置 25:顺序不是在范围(128)
和串保存在 m['Text']
拉拉*=#&%@<>_?!:;-'"/()¥¡¿
这是一段代码
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查询和投入 打印文本 它将打印出拉拉*=#&%@<>_?!:;-'"/()¥¡¿
错误仅仅是时遇到的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)
其他提示
它是不清楚是否是你的 m['Text']
值的类型 StringType
或 UnicodeType
.我的打赌是那是一个字节-string(StringType
).如果这是真的,然后添加一条线 m['Text'] = m['Text'].decode('UTF-8')
之前插入可能的工作。
不隶属于 StackOverflow