我使用以下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之间的数据库是一致的。你知道吗
如果所有东西都配置正确,就不需要对字符串进行解码/编码。你知道吗
Hex
E8
是拉丁文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
相关问题 更多 >
编程相关推荐