У меня есть небольшой скрипт 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)
.
Я использую, чтобы закодировать инструкцию insert, но я получаю только 1 выбранную запись (отмечен с помощью MySQL Workbench). Идентификатор не имеет ничего общего с идентификатором в Python, это что-то вроде 2157483647
.
Я узнал, что он хорошо работает, когда я меняю поле БД на varchar(25)
. Затем можно сделать все сделанные вставки циклы, и идентификаторы также верны. Но я думаю, что это не так, как это сделать.
В MySQL INT(25)
указывает только ширину отображения, как описано здесь. Вы не получите целочисленное поле с емкостью для хранения 25-значных широкоформатных чисел, поле INT всегда будет шириной 32 бит, что объясняет полученные вами результаты - число просто нарезается, чтобы вписаться в 32 бита.
Если вам нужно хранить такие большие числа, посмотрите типы DECIMAL или NUMERIC.
Также прочитайте эту часть руководства, чтобы понять, как MySQL будет справляться с такими ситуациями.