python - 使用不同于 utf8 的编码从 Python 写入数据库
问题描述
Python 3.7.2
我将 Python 代码中的字符串写入数据库。我的字符串包含拉丁文和西里尔文字符,因此在数据库中我使用 1 字节编码 koi8-r。奇迹是我的字符串没有失真地写入数据库,虽然 utf8 和 koi8r 有完全不同的字符序列(例如 ascii 和 utf8)。有时文本中出现其他布局的字符,然后出现写入错误。
因此,问题出现了:
- 谁转换字符串:我用来写入数据库的数据库或 aiomysql 库。
- 在 Python / MariaDB 中删除非 koi8-r 字符以避免错误的速度有多快。
- 是否有一种多字节编码将拉丁文和西里尔文字符存储在第一个字节中,并将其他布局存储在其他字节中。
预先感谢您参与对话。
解决方案
以下是处理时INSERTing
:
- 客户端具有使用 charset-1 编码的字符。
- 您告诉 MySQL,当您连接或通过
SET NAMES
. - 将插入字符的列被声明为 charset-2。
- 从
INSERT
charset-1 转换为 charset-2。所以,一切都很好。
在SELECTing
上,同样的事情发生了,除了转换是在另一个方向上。
你在做什么是好的。但是,展望未来,每个人都“应该”在客户端和列中使用UTF-8
字符。CHARACTER SET utf8mb4
如果您超出您的字符集允许的范围(可能只不过是俄语和英语),您基本上必须更改为此类。
推荐阅读
- javascript - 如何使用 jquery/javascript 获取选中复选框的所有值?
- python - 如何让pywinauto在后台工作?
- regex - 无法使用正则表达式关联字符串
- excel - 如果四个数字单元格匹配,则从第 5 个单元格返回值
- autodesk-forge - 如何在 Forge 查看器中复制或克隆模型的元素
- javascript - 循环遍历对象数组并获取特定键的最快方法
- java - bug:java.lang.SecurityExceptionsigner信息与同包中其他类的signer信息不匹配
- javascript - 我们如何调整 sap.m.table 中的行高?
- angular - 无法匹配任何路由。Nativescript 中的 URL 段错误
- kubernetes - Helm 安装 Kubernetes Federation v2 错误