You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
      
    • 确认表单或请求体传入的字符串未被错误转码,直接传入数据库即可,由驱动处理编码转换。

内容的提问来源于stack exchange,提问作者Volodymyr Mazur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:05:18