我试图将希伯来语存储在MySQL表中 - 但我最终看到了问号。 我正在使用Python烧瓶服务器。 我相信字符集和整理设置正确(这是运行的输出' show create table':
CREATE TABLE
some_table
(some_field
varchar(128)COLLATE utf8mb4_unicode_ci DEFAULT NULL)ENGINE = InnoDB AUTO_INCREMENT = 19 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci
我的SQLALCHEMY_DATABASE_URI是:
' MySQL的://用户名:密码@本地/数据库的charset = utf-8'
我插入表中的数据最初是在Python视图函数中接收的,我按如下方式处理:
data = request.get_json()
some_field = data['some_field'].encode('utf-8')
然后我插入" some_field"将对象放入some_field列。
注意:当我尝试将some_field变量打印到Python控制台时,我也会看到一个乱码字符串,但我认为这是因为控制台本身无法显示希伯来语(不确定这是否会导致问题)......
答案 0 :(得分:0)
不要使用编码或解码。坚持使用UTF-8,而不是Unicode。我预测从长远来看你会对Unicode不满意。见"问号"在Trouble with UTF-8 characters; what I see is not what I stored中讨论可能的原因。
答案 1 :(得分:0)
我将MySQLdb与Flask(python)结合使用,并且遇到了完全相同的问题(DB的希伯来语显示为问号 ????? )
通过以下步骤解决了该问题:
这就是我认为有所作为的原因。 [link] MySQLdB连接参数(字符集)。 这是我的(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)
注意字符集和 use_unicode ,尽管我输入了默认值,但此更改解决了问题。
我不确定前面的所有步骤和两个参数是否都是必需的。
答案 2 :(得分:0)
尝试将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)