【发布时间】:2019-09-30 16:56:17
【问题描述】:
当我尝试用希腊字母在文本字段中输入数据时,我的 wsgi 脚本将该数据保存为 MySQL 数据库中的乱码,我不知道为什么。 下面是即将通过form方法发布数据时的相关代码:
pdata = pdata + '''
<form methods="POST" enctype="multipart/form-data" action="%s">
<tr>
<td> <center> <input type="text" name="task" size=50> </td>
<td> <center> <input type="text" name="price" size=5> </td>
<td> <center> <input type="text" name="lastvisit"> </td>
</table><br><br>
<td> <input type="image" src="/static/img/submit.gif" name="update" value="Ενημέρωση!"> </td>
</tr>
</form>
''' % app.get_url( '/update/<name>', name=name )
pdata = pdata + "<meta http-equiv='REFRESH' content='200;%s'>" % app.get_url( '/' )
return pdata
这里是相关的回调函数,它试图将发布的表单数据输入 MySQL 数据库。
@app.route( '/update/<name>' )
def update( name ):
pdata = ''
task = request.query.get('task')
price = request.query.get('price')
lastvisit = request.query.get('lastvisit')
# check if date entered as intented, format it properly for MySQL
lastvisit = datetime.strptime(lastvisit, '%d %m %Y').strftime('%Y-%m-%d')
if( ( task and len(task) <= 200 ) and ( price and price.isdigit() and len(price) <= 3 ) and lastvisit != "error" ):
# find the requested client based on its name
cur.execute('''SELECT ID FROM clients WHERE name = %s''', name )
clientID = cur.fetchone()[0]
try:
# found the client, save primary key and use it to issue hits & money UPDATE
cur.execute('''UPDATE clients SET hits = hits + 1, money = money + %s WHERE ID = %s''', ( int(price), clientID ))
# update client profile by adding a new record
cur.execute('''INSERT INTO jobs (clientID, task, price, lastvisit) VALUES (%s, %s, %s, %s)''', ( clientID, task, price, lastvisit ))
except:
cur.rollback()
我无法理解为什么将数据作为乱码而不是正确的 utf-8 存储到数据库中。也尝试使用 utf-8 编码类型也不起作用。
<form methods="POST" enctype="utf-8" action="%s">
【问题讨论】:
-
愚蠢的问题,但是数据库中的列是否以接受 UTF-8 的方式设置?这也可能是后端问题
-
是的 MySQL 表和列配置为 utf8_general_ci。
-
你能展示一个python中数据的例子,以及MySQL中产生的损坏数据吗?
repr两者都很好。 -
听起来 MySQL 配置不正确。您可以通过在此处粘贴文本、接受默认值并查看输出来查看您的文本是如何被错误编码的:string-functions.com/encodedecode.aspx 您还可以从这些其他答案中收集一些信息:stackoverflow.com/questions/6202726/… 和 stackoverflow.com/questions/4404768/…
-
如果您使用文档中建议的点表示法,数据是否正确保存?例如
request.query.task而不是request.query.get('task')。