Knex. js Ошибка parseLengthCodedNumber: JS превышен диапазон точности, число>> 53 бита: "18446744073709551615" - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь вставить несколько строк в таблицу с контроллера express. js, используя knex. js:

yield knex.withSchema(MySchema).insert(something).into('MyTable');

, но получаю эту ошибку:

Error: parseLengthCodedNumber: JS precision range exceeded, number is >= 53 bit: "18446744073709551615"

Переменная'thing '- это набор строк из другой таблицы с отрицательными идентификаторами:

'-2', '552', 'something1', NULL, '-2', '1', '0000-00-00 00:00:00', '2020-03-31 14:27:32'
'-1', '552', 'something2', NULL, '-1', '0', '0000-00-00 00:00:00', '0000-00-00 00:00:00'

Моя база данных - MariaDB 10.3.21, и я использую knex 0.12.9

Есть идеи?

1 Ответ

0 голосов
/ 05 апреля 2020

Я верю, что MySQL .increments() по умолчанию будет unsigned. Я не проверял это, но я ожидаю, что попытка вставить отрицательное целое число приведет к переполнению (см. MySQL переполнение целых чисел для точного поведения). По-видимому, это приводит к положительному целому числу, которое больше JavaScript s MAX_SAFE_INTEGER.

Если вам абсолютно необходимы отрицательные идентификаторы, вы, вероятно, можете обойти это, установив таблица для использования целых чисел со знаком в качестве первичных ключей, импорта данных, а затем установки начального значения автоинкремента на значение, превышающее максимальный идентификатор, представленный в данных. Я полагаю, что все ваши таблицы будут нуждаться в целых числах со знаком в качестве идентификаторов, поэтому вы сравниваете их как с *.

...