gpt4 book ai didi

python - 如果我知道只会使用 Latin-1 字符,是否可以将 UTF8 编码字符插入 Latin-1 表?

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:59 25 4
gpt4 key购买 nike

我在数据库中有 10 个表。其中 9 个只存储 Latin-1 支持的标准 ascii 1 字节字符的数据。其中 1 个要求我存储仅受 UTF8 支持的特殊字符。我想使用相同的 MySQL 连接对象(使用 Python 的 PyMySQL 库)来填充所有 10 个表。

之前在创建MySQL连接对象时,我没有指定字符集,默认为Latin-1。当我只填充 9 个 Latin-1 表时,这很好。现在我正在填充 UTF8 表,我通过将参数 charset='utf8mb4' 传递给 PyMySQL 连接对象函数来修改连接对象:

# Connect to the database
connection = pymysql.connect(host='localhost',
user='user',
password='passwd',
db='db',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)

现在我确信,当插入我的 UTF8 MySQL 表时,我的所有数据都存储良好。但是,我不确定在使用我的 UTF8 连接对象并插入 Latin-1 表时是否会出现问题。在我的第一轮测试之后,一切看起来都很棒。

有什么我忽略的吗?将 UTF8 编码字符插入 Latin-1 表是否存在任何潜在问题?

最佳答案

这是可以做到的。但是......你必须正确设置一些东西,否则你会得到几种形式的垃圾中的任何一种。

如果客户端中的字节是 UTF-8 编码的,那么您必须告诉 MySQL 这个事实。这通常在连接字符串上完成。您的 charset='utf8mb4' 连接参数可以做到这一点。以下是一些特定于 Python 的提示:http://mysql.rjweb.org/doc.php/charcoll#python

同时,表中的列可以是 latin1 或 utf8(因为您确定数据仅限于它们之间的通用字符)。

一个字符示例:é 在 latin1 中是十六进制 E9,在 MySQL 的 utf8(或 utf8mb4)中是 C3A9。如果您正确声明客户端编码,转换将在 INSERTSELECT 期间发生。

(出于的目的,utf8 和 utf8mb4 均可。)

如果您还有其他问题,请参阅 Trouble with utf8 characters; what I see is not what I stored和/或提供 SHOW CREATE TABLE 和一些违规字符的十六进制。

关于python - 如果我知道只会使用 Latin-1 字符,是否可以将 UTF8 编码字符插入 Latin-1 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40510867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com