首页 > 解决方案 > 使用不同于 utf8 的编码从 Python 写入数据库

问题描述

Python 3.7.2

我将 Python 代码中的字符串写入数据库。我的字符串包含拉丁文和西里尔文字符,因此在数据库中我使用 1 字节编码 koi8-r。奇迹是我的字符串没有失真地写入数据库,虽然 utf8 和 koi8r 有完全不同的字符序列(例如 ascii 和 utf8)。有时文本中出现其他布局的字符,然后出现写入错误。

因此,问题出现了:

  1. 谁转换字符串:我用来写入数据库的数据库或 aiomysql 库。
  2. 在 Python / MariaDB 中删除非 koi8-r 字符以避免错误的速度有多快。
  3. 是否有一种多字节编码将拉丁文和西里尔文字符存储在第一个字节中,并将其他布局存储在其他字节中。

预先感谢您参与对话。

标签: pythonmysqlpython-3.xcharacter-encoding

解决方案


以下是处理时INSERTing

  1. 客户端具有使用 charset-1 编码的字符。
  2. 您告诉 MySQL,当您连接或通过SET NAMES.
  3. 将插入字符的列被声明为 charset-2。
  4. INSERTcharset-1 转换为 charset-2。所以,一切都很好。

SELECTing上,同样的事情发生了,除了转换是在另一个方向上。

你在做什么是好的。但是,展望未来,每个人都“应该”在客户端和列中使用UTF-8字符。CHARACTER SET utf8mb4如果您超出您的字符集允许的范围(可能只不过是俄语和英语),您基本上必须更改为此类。


推荐阅读