mysql将文本存储为问号(flask服务器)
我试图将希伯来语存储在MySQL表中,但最终我看到了问号。 我正在使用Python flask服务器。 我相信字符集和排序规则设置正确(以下是运行“show create table”的输出: 创建表格mysql将文本存储为问号(flask服务器),mysql,flask,utf-8,python-2.x,hebrew,Mysql,Flask,Utf 8,Python 2.x,Hebrew,我试图将希伯来语存储在MySQL表中,但最终我看到了问号。 我正在使用Python flask服务器。 我相信字符集和排序规则设置正确(以下是运行“show create table”的输出: 创建表格some_表格(some_字段varchar(128)整理 utf8mb4_unicode_ci默认值NULL)引擎=InnoDB自动_增量=19默认值 字符集=utf8mb4 COLLATE=utf8mb4\u unicode\u ci 我的SQLALCHEMY_数据库_URI是: "mysql
some_表格
(some_字段
varchar(128)整理
utf8mb4_unicode_ci默认值NULL)引擎=InnoDB自动_增量=19默认值
字符集=utf8mb4 COLLATE=utf8mb4\u unicode\u ci
我的SQLALCHEMY_数据库_URI是:
"mysql://username:password@本地主机/数据库?字符集=utf8'
我插入到表中的数据最初是在Python视图函数中接收的,我对其进行如下处理:
data = request.get_json()
some_field = data['some_field'].encode('utf-8')
然后将“some_field”对象插入some_field列
注意:当我尝试将some_字段变量打印到Python控制台时,我也看到了一个乱七八糟的字符串,但我认为这是因为控制台本身无法显示希伯来语(不确定这是否导致了问题).当我最终尝试直接呈现数据时(而不是在我的mysql控制台中启动它),结果是它被正确地存储为unicode。谢谢@Amadan不要使用编码或解码。坚持使用UTF-8,而不是unicode。我预测从长远来看,你会对unicode不满意。有关可能的原因的讨论,请参阅中的“问号”。我正在使用MySQLdb和Flask(python),遇到了完全相同的问题(DB中的希伯来语显示为问号????) 通过以下步骤解决此问题:
db = MySQLdb.connect(host="username.mysql.pythonanywhere-services.com", # your host
user="username", # username
passwd="yourpassword", # password
db="db(schema)name", # name of the database
charset="utf8",
use_unicode=True)
我不确定前面的所有步骤和两个参数是否都是必需的。尝试向列定义中添加
collation='utf8\u bin'
。
例如,在models.py上:
class Users(db.Model):
__tablename__ = 'Users'
id = db.Column(db.Integer, primary_key=True)
full_name = db.Column(db.String(80, collation='utf8_bin'), unique=False, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
“我假设这是因为控制台本身不能显示希伯来语”-所以不要打印字符串,打印表示:
':'。在某个字段中加入(hex(ord(x))[2:]表示x)
并查看变量是否包含您认为应该包含的内容,以及编码是否正确。此外,请在帖子上标记或,因为在谈论编码时,它非常相关。此外,请检查您的网页是否也使用了正确的编码。@Amadan我打印了该变量并获得了“5e9:5dc:5d5:5dd”,这是正确的。这是Python2,感谢您指出这一点。传出的web请求将其编码设置为utf-8。并且…在连接字符串中使用utf8mb4也不起作用,它会导致错误:/You get5e9:5dc:5d5:5dd
插入数据库之前?从数据库中读取后得到了什么?如何插入?那么如何检索呢?@Amadan我以“data=request.get_json()”的形式读取传入数据。当我执行“print data”时,我看到{u'some_field:u'\u05e9\u05dc\u05d5\u05dd'}。但是,如果我尝试“print data['some_field']”,我会看到胡言乱语。我使用SQLALCHEMY插入数据,我尝试插入数据['some_field']直接插入,以及在应用decode('utf-8)和/或encode('utf-8')后插入。您没有说,当您从数据库中取出数据时会得到什么?(十六进制转储,因此我们不会陷入猜测的胡言乱语:)