python 3.7.2
我将 Python 代码中的字符串写入数据库。我的字符串包含拉丁字符和西里尔字符,因此在数据库中我使用 1 字节编码 koi8-r。奇迹是我的字符串没有失真地写入了数据库,尽管 utf8 和 koi8r 具有完全不同的字符序列(例如,ascii 和 utf8)。有时文本中会出现其他排版的字符,然后出现书写错误。
因此,问题出现了:
- 谁转换字符串:数据库或我用来写入数据库的 aiomysql 库。
- 在 Python/MariaDB 中删除非 koi8-r 字符以避免错误的速度有多快。
- 是否有一种多字节编码,在第一个字节中存储拉丁字符和西里尔字符,而在其他字节中存储其他布局。
预先感谢您参与对话。
最佳答案
这是INSERTing
时的处理:
- Client 有使用 charset-1 编码的字符。
- 当您连接或通过
SET NAMES
连接时,您告诉 MySQL 就是这种情况。 - 将要插入字符的列声明为 charset-2。
INSERT
将 charset-1 转换为 charset-2。所以,一切都很好。
在 SELECTing
时,发生了同样的事情,除了转换是在另一个方向上。
你在做什么是好的。但是,展望 future ,每个人都“应该”在客户端中使用 UTF-8
字符,在列中使用 CHARACTER SET utf8mb4
。如果您超出了您的字符集所允许的范围,您基本上必须更改为这样,这可能只不过是俄语和英语。
关于python - 使用不同于 utf8 的编码从 Python 写入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54977938/