我试图将希伯来语存储在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控制台时,我还看到一个乱码字符串,但我假设这是因为控制台本身不能显示希伯来语(不确定这是否导致了问题)。。。
4条答案
按热度按时间2j4z5cfb1#
尝试添加
collation='utf8_bin'
到列定义。例如,在models.py:j7dteeu82#
我将mysqldb与flask(python)一起使用,遇到了完全相同的情况(db中的希伯来语显示为问号??)
通过以下步骤解决:
[链接]-更改每个级别的字符集:db、table和column!
[链接]-设置名称“utf8”;
我认为这就是区别所在:[link]mysqldb连接参数(char set)。这就是我的(python)连接字符串现在的样子:
注意字符集并使用\u unicode尽管我设置了默认值,但这个更改解决了问题。
我不确定前面的所有步骤和两个论点是否都是必要的。
jexiocij3#
不要使用编码或解码。坚持使用utf-8,而不是unicode。我预测从长远来看你会对unicode不满意。用utf-8字符查看故障中的“问号”;我所看到的并不是为了讨论可能的原因而储存的东西。
vc9ivgsu4#
当我最终尝试直接呈现数据(而不是仅仅在mysql控制台中启动它)时,结果发现它被正确地存储为unicode。谢谢@amadan