MySQL предоставляет неверный идентификатор после вставки (тип данных?)

0

У меня есть небольшой скрипт 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). Затем можно сделать все сделанные вставки циклы, и идентификаторы также верны. Но я думаю, что это не так, как это сделать.

  • 0
    Вы уверены, что используете правильный способ получения последнего идентификатора? Мне кажется, что вы выбираете идентификатор курсора, а не last_insert_id.
  • 0
    Да, я использую сущность SELECT * FROM в MySQL, а не в Python. Идентификатор столбца показывает не идентификатор из моего скрипта Python, и есть только одна запись (как будто остановлен после первой вставки?)
Теги:
sqldatatypes

1 ответ

1
Лучший ответ

В MySQL INT(25) указывает только ширину отображения, как описано здесь. Вы не получите целочисленное поле с емкостью для хранения 25-значных широкоформатных чисел, поле INT всегда будет шириной 32 бит, что объясняет полученные вами результаты - число просто нарезается, чтобы вписаться в 32 бита.

Если вам нужно хранить такие большие числа, посмотрите типы DECIMAL или NUMERIC.

Также прочитайте эту часть руководства, чтобы понять, как MySQL будет справляться с такими ситуациями.

  • 0
    Большое спасибо! Вот и все. Я поменял поле на DECIMAL (25,0) и теперь оно отлично работает!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню