Flask+MySQL应用中西里尔字符存储为问号的问题求助
Flask+MySQL西里尔字符显示"????"问题排查方案
确认数据库/表/字段的字符集一致性
仅设置数据库级字符集不够,需检查表和字段是否继承了正确的配置:
执行以下SQL命令验证:SHOW CREATE DATABASE your_dbname; SHOW CREATE TABLE your_tablename; SHOW FULL COLUMNS FROM your_tablename;确保数据库、目标表、所有存储西里尔字符的字段的字符集均为
cp1251,排序规则为cp1251_general_ci。若存在不一致,执行修改命令:-- 修改表字符集 ALTER TABLE your_tablename CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci; -- 修改单个字段字符集 ALTER TABLE your_tablename MODIFY column_name VARCHAR(255) CHARACTER SET cp1251 COLLATE cp1251_general_ci;修正数据库连接参数
MySQL Connector的URL参数中collation并非有效配置项,多余参数可能导致编码设置失效,简化连接字符串:application.config['SQLALCHEMY_DATABASE_URI'] = f'mysql+mysqlconnector://{creds["user"]}:{creds["pass"]}@{creds["host"]}:{creds["port"]}/{creds["dbname"]}?charset=cp1251'强制设置连接会话编码
部分免费MySQL服务的全局字符集可能覆盖数据库级配置,可在连接后手动指定会话编码:from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy(application) # 初始化后执行会话编码设置 with db.engine.connect() as conn: conn.execute("SET NAMES cp1251;") conn.execute("SET CHARACTER SET cp1251;")确保应用端编码匹配
Flask默认使用UTF-8编码,需保证请求数据的编码与数据库兼容:- 若返回JSON包含西里尔字符,开启非ASCII支持:
application.config['JSON_AS_ASCII'] = False - 确认表单或请求体传入的字符串未被错误转码,直接传入数据库即可,由驱动处理编码转换。
- 若返回JSON包含西里尔字符,开启非ASCII支持:
内容的提问来源于stack exchange,提问作者Volodymyr Mazur
相关产品推荐
相关产品推荐

