mysql将文本存储为问号(flask服务器)

xkftehaa  于 2021-06-23  发布在  Mysql
关注(0)|答案(4)|浏览(431)

我试图将希伯来语存储在mysql表中,但最后我看到了问号。我用的是python flask 服务器。我相信字符集和排序规则设置正确(下面是运行“show create table”的输出:
创建表 some_table ( some_field varchar(128)collate utf8mb4\u unicode\u ci default null)engine=innodb auto\u increment=19 default charset=utf8mb4 collate=utf8mb4\u unicode\u ci
我的sqlalchemy\数据库\ uri是:
'mysql://username:password@localhost/database?charset=utf8'
我插入表中的数据最初是在python视图函数中接收的,我按如下方式处理它:

data = request.get_json() 
some_field = data['some_field'].encode('utf-8')

然后将“some\u field”对象插入some\u field列。
注意:当我尝试将some_字段变量打印到python控制台时,我还看到一个乱码字符串,但我假设这是因为控制台本身不能显示希伯来语(不确定这是否导致了问题)。。。

2j4z5cfb

2j4z5cfb1#

尝试添加 collation='utf8_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)
j7dteeu8

j7dteeu82#

我将mysqldb与flask(python)一起使用,遇到了完全相同的情况(db中的希伯来语显示为问号??)
通过以下步骤解决:
[链接]-更改每个级别的字符集:db、table和column!
[链接]-设置名称“utf8”;
我认为这就是区别所在:[link]mysqldb连接参数(char set)。这就是我的(python)连接字符串现在的样子:

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)

注意字符集并使用\u unicode尽管我设置了默认值,但这个更改解决了问题。
我不确定前面的所有步骤和两个论点是否都是必要的。

jexiocij

jexiocij3#

不要使用编码或解码。坚持使用utf-8,而不是unicode。我预测从长远来看你会对unicode不满意。用utf-8字符查看故障中的“问号”;我所看到的并不是为了讨论可能的原因而储存的东西。

vc9ivgsu

vc9ivgsu4#

当我最终尝试直接呈现数据(而不是仅仅在mysql控制台中启动它)时,结果发现它被正确地存储为unicode。谢谢@amadan

相关问题