python - python 编码中的 mysql

标签 python mysql encoding mysql-python

这篇文章和我在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/

相关文章:

python - 不永久保存环境

mysql - Cassandra 可以用于即时创建表吗?如果是,平均需要多少时间?

MySQL:同一场比赛有多个 Volley 盘结果

r - Shiny 中出现意外输入错误,但无法定位错误源

python - django 将额外的参数传递给filterset_class

python - 使用字段组合在 python peewee 中查询

python - python-3.6 中带有 'f' 前缀的字符串

MySQL Group By每种类型的前N个数

c# - 如何在Python中将字符串转换为16位无符号整数?

javascript - 使用 Node JS 将多个 JPG 转换为动画 GIF