gpt4 book ai didi

python - 通过 SQLAlchemy 插入 MySQL 的行上的字符集会根据机器而变化吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:07 24 4
gpt4 key购买 nike

我使用以下 Python 代码向 MySQL 表中插入一行:

city = City()
city.country_id = connection.globe.session.query(Country).\
filter(Country.code == row[1]).one().id
city.name = row[3].decode('latin1').encode('utf8')
city.province = row[2].decode('latin1').encode('utf8')
[city.latitude, city.longitude] = [row[5], row[6]]

connection.globe.session.add(city)
connection.globe.session.commit()

在我的本地机器上测试时,示例行被正确插入:

75,209,36,Radès,36.7681,10.2753

使用来自不同机器 (AWS) 的相同代码会导致行略有不同:

75,209,36,Radès,36.7681,10.2753

整个 MySQL 数据库都配置为使用 utf8mb4 编码,实际上我花了很多时间相信 MySQL 应该为编码错误负责。但由于我一直在不同的机器上运行它,我注意到相同的代码在一台机器上运行,但在另一台机器上运行。

由于正在执行相同的代码,我不认为我的 Python 代码是罪魁祸首。

我在这里遗漏了 Linux 和字符集/字符编码的一些奇怪之处吗?

编辑:我应该注意到它们连接到同一个 RDS 数据库,这意味着数据库在两个插入之间是一致的。

最佳答案

如果所有配置都正确,则不需要对字符串进行解码/编码。

Hex E8 是latin1中的编码; hex C3A8 是utf8中的编码。

如果传入的数据是 latin1,就这样声明它,然后让 MySQL 在您INSERT 时转换成一个表。 LOAD DATA(假设这是您用来读取 .csv 文件的内容)有一个 CHARACTER SET 子句。与数据库的连接需要在客户端指定编码。列/表需要在列中指定编码。更多讨论(尤其是“Mojibake”):http://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored

拜顿笔记:http://mysql.rjweb.org/doc.php/charcoll#python

关于python - 通过 SQLAlchemy 插入 MySQL 的行上的字符集会根据机器而变化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44462578/

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