【问题标题】:SQLAlchemy mysql cannot get the correct charsetSQLAlchemy mysql 无法获取正确的字符集
【发布时间】:2021-10-29 10:20:00
【问题描述】:

带有 Flask 2.0.1 和 Flask-SQLAlchemy 2.5.1 的 Python 3.8.8 程序

MySql 数据库,表格整理:utf8_general_ci。 我正在使用另外两个带有 SQLALCHEMY_BINDS 的 sqlserver 数据库。一切都在 Windows 10 上运行。

MySql DB 上的选择查询中的一些字符出错:“situazione è decisamente migliorata” 应该是:“situazione è decisamente migliorata”

这样可以解决问题:

mystring.encode('cp1252').decode('utf8')

但我需要一个程序级别的解决方案。我试过了:

  • 附加到 SQLALCHEMY_DATABASE_URI 连接字符串: "?charset=utf8" 或 "?charset=cp1215" 等
  • 设置 app.config['MYSQL_CHARSET'] 和 app.config['MYSQL_DATABASE_CHARSET'] 到 'utf8'、'utf8mb4'、'latin1'、'cp1252' ...
  • 将参数传递给 SQLAlchemy,例如 db = SQLAlchemy(use_native_unicode="utf8"),这里也有很多变体

没有尝试成功。请给我建议。

【问题讨论】:

  • 您确定问题出在哪里?您可能错误地解码为您的“打印”或您正在使用的 w/e 来查看此处的差异。可能还有一些其他地方的编码可能会混淆。
  • 是的,绝对确定。我可以使用 pycharm 的调试器在选择查询的结果中读取错误的字符

标签: mysql flask sqlalchemy flask-sqlalchemy


【解决方案1】:

您是否正在寻找一种方法来指定每个数据库连接编码?

对于所有连接尝试使用

app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {'encoding': 'cp1252'}

对于到不同数据库的特定连接,您还可以使用engine_options

engine = create_engine('mysql://user:password@hostname/dbname',
                            encoding='cp1252')

【讨论】:

    【解决方案2】:

    找到解决办法。

    问题不是问题。 建立原始数据库的人(那是相当古老的)编码错误的一些字符。 我的一些方法和 olegsv 建议的方法有效,我检查了深入到 sqlalchemy 数据结构中的调试,驱动程序接受了字符编码,但是数据中的字符本身就是错误的。 这是没有预料到的。 也许我应该删除整个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多