python - 使用不同于 utf8 的编码从 Python 写入数据库

标签 python mysql python-3.x character-encoding

python 3.7.2

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

因此,问题出现了:

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

预先感谢您参与对话。

最佳答案

这是INSERTing时的处理:

  1. Client 有使用 charset-1 编码的字符。
  2. 当您连接或通过 SET NAMES 连接时,您告诉 MySQL 就是这种情况。
  3. 将要插入字符的列声明为 charset-2。
  4. INSERT 将 charset-1 转换为 charset-2。所以,一切都很好。

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

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

关于python - 使用不同于 utf8 的编码从 Python 写入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54977938/

相关文章:

Python函数只运行一次

php - Sql – 在列的第一个空单元格中插入值并显示 ID

python-3.x - 在Windows7上构建tensorflow

python - Google AppEngine 使用哪个 simplejson 模块?

python - 如何在Python中转换requests.models.Response对象中的dict对象?

java - Dockerized Mac/Java 应用程序无法与本地主机通信

c# - nhibernate 和 mysql 数据库

python-3.x - 如何在AWS Lambda函数上部署依赖较大且超出部署限制的项目?

python - 将 Qt Pyside2 与 asyncio await 语法一起使用?

python - Django多表继承,如何知道哪个是模型的子类?