通过SQLAlchemy在MySQL中插入的字符集是否会因为不同的机器而改变?

2024-04-29 12:46:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用以下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数据库,这意味着两个insert之间的数据库是一致的。你知道吗


Tags: 代码机器id数据库city编码sessionmysql
1条回答
网友
1楼 · 发布于 2024-04-29 12:46:09

如果所有东西都配置正确,就不需要对字符串进行解码/编码。你知道吗

HexE8是拉丁文1的编码;HexC3A8是utf8的编码。你知道吗

如果传入的数据是拉丁文1,那么将其声明为拉丁文1,然后让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

相关问题 更多 >