python - MySQL 在插入后提供错误的 ID(数据类型?)

标签 python mysql sqldatatypes

我有一个小的 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/

相关文章:

python - 在 Python 跟踪中查找完整路径名

mysql - 当 count = 0 时按中断计数分组

php - 数据库中的 DataTables saveState 不起作用

mysql - 在 MySQL 中存储货币值的最佳数据类型

python - Python 2 和 Python 3 之间的什么区别导致了这个错误?

python for 循环无法识别列表中的 int

php - 实时 Ajax 搜索不打印所有结果

java - Oracle:整数字段返回 NUMBER

sql-server-2008 - MAX(text) 返回操作数数据类型 text 对于 max 运算符无效。在 SQL Server 2008 中

python - Keras:如何保存模型并继续训练?