我有一个小的 python (3.64) 脚本,可以在 MySQL DB (10.1.26 MariaDB) 中插入记录
import MySQLdb as mdb
...
for id in allids
...
cursor.execute("INSERT IGNORE INTO entity(id,name) VALUES (%s, %s)", (identifier, name))
标识符是一个整数,如2832718610241077149
并且始终为19位数字。
MySQL 字段为 int(25)
。
我曾经循环插入语句,但我只选择了 1 条记录(使用 MySQL Workbench 检查)。那里的 id 与 Python 中的标识符没有任何共同之处,它类似于 2157483647
。
我发现,当我将数据库字段更改为 varchar(25)
时,效果很好。然后可以选择循环中所有插入的内容,并且 ID 也是正确的。但我想这不是如何做到的。
最佳答案
在MySQL中,INT(25)
仅表示显示宽度,as explained here 。您没有获得能够存储 25 位宽数字的整数类型字段,INT 字段将始终是 32 bits wide这解释了您得到的结果 - 该数字只是被截短以适合 32 位。
如果您需要存储这么大的数字,请查看 DECIMAL or NUMERIC类型。
另请阅读this part of the manual了解MySQL将如何处理这种情况。
关于python - MySQL 在插入后提供错误的 ID(数据类型?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51570218/