Ошибка целое вне диапазона sql

I have two queries. I expect both insert same value: 429496729600, but one of them fail because of error:

db=> update order_detail set amount = 400*1024*1024*1024 where id = 11;
ERROR:  integer out of range
db=> update order_detail set amount = 429496729600 where id = 11;
UPDATE 1

Why the error occur for first query?

UPD
Forget to specify that type of amount is bigint and the

400*1024*1024*1024 == 429496729600  

D-Shih's user avatar

D-Shih

44.7k6 gold badges29 silver badges50 bronze badges

asked Sep 8, 2018 at 19:39

Eugen Konkov's user avatar

Eugen KonkovEugen Konkov

21.7k14 gold badges105 silver badges154 bronze badges

1

To force the multiplication to output a bigint instead of an int, you can cast 1 to a bigint and multiply

select cast(1 as bigint)*400*1024*1024*1024;
   ?column?
--------------
 429496729600

answered Sep 8, 2018 at 19:50

JGH's user avatar

3

int maximum value of 231-1, the first Update value greater than it so caulse the erorr.

INT -2147483648 to +2147483647

You can try to let amount column to BIGINT Type

BIGINT-9223372036854775808 to 9223372036854775807

ALTER TABLE order_detail ALTER COLUMN amount TYPE BIGINT;

Data Types


EDIT

we can use pg_typeof to check it out.

Query #1

postgresql will let 429496729600 be BIGINT because of the value greater than int range.

SELECT pg_typeof(429496729600 );

| pg_typeof |
| --------- |
| bigint    |

Query #2

When you do multiplication in number that will translate to int.

SELECT pg_typeof( 1*15*1  );

| pg_typeof |
| --------- |
| integer   |

View on DB Fiddle

Query

You can use 400*1024*1024*1024:: BIGINT let int convert to bigint.

SELECT 400*1024*1024*1024 :: BIGINT;

| ?column?     |
| ------------ |
| 429496729600 |

View on DB Fiddle

answered Sep 8, 2018 at 19:45

D-Shih's user avatar

D-ShihD-Shih

44.7k6 gold badges29 silver badges50 bronze badges

1

I’ve set up a table accordingly:

CREATE TABLE raw (
    id          SERIAL,
    regtime     float NOT NULL,
    time        float NOT NULL,
    source      varchar(15),
    sourceport  INTEGER,
    destination varchar(15),
    destport    INTEGER,
    blocked     boolean
); ... + index and grants

I’ve successfully used this table for a while now, and all of a sudden the following insert doesn’t work any longer..

INSERT INTO raw(
    time, regtime, blocked, destport, sourceport, source, destination
) VALUES (
    1403184512.2283964, 1403184662.118, False, 2, 3, '192.168.0.1', '192.168.0.2'
);

The error is: ERROR: integer out of range

Not even sure where to begin debugging this.. I’m not out of disk-space and the error itself is kinda discreet.

I have two queries. I expect both insert same value: 429496729600, but one of them fail because of error:

db=> update order_detail set amount = 400*1024*1024*1024 where id = 11;
ERROR:  integer out of range
db=> update order_detail set amount = 429496729600 where id = 11;
UPDATE 1

Why the error occur for first query?

UPD
Forget to specify that type of amount is bigint and the

400*1024*1024*1024 == 429496729600  

D-Shih's user avatar

D-Shih

44.6k6 gold badges29 silver badges50 bronze badges

asked Sep 8, 2018 at 19:39

Eugen Konkov's user avatar

Eugen KonkovEugen Konkov

21.7k14 gold badges105 silver badges154 bronze badges

1

To force the multiplication to output a bigint instead of an int, you can cast 1 to a bigint and multiply

select cast(1 as bigint)*400*1024*1024*1024;
   ?column?
--------------
 429496729600

answered Sep 8, 2018 at 19:50

JGH's user avatar

3

int maximum value of 231-1, the first Update value greater than it so caulse the erorr.

INT -2147483648 to +2147483647

You can try to let amount column to BIGINT Type

BIGINT-9223372036854775808 to 9223372036854775807

ALTER TABLE order_detail ALTER COLUMN amount TYPE BIGINT;

Data Types


EDIT

we can use pg_typeof to check it out.

Query #1

postgresql will let 429496729600 be BIGINT because of the value greater than int range.

SELECT pg_typeof(429496729600 );

| pg_typeof |
| --------- |
| bigint    |

Query #2

When you do multiplication in number that will translate to int.

SELECT pg_typeof( 1*15*1  );

| pg_typeof |
| --------- |
| integer   |

View on DB Fiddle

Query

You can use 400*1024*1024*1024:: BIGINT let int convert to bigint.

SELECT 400*1024*1024*1024 :: BIGINT;

| ?column?     |
| ------------ |
| 429496729600 |

View on DB Fiddle

answered Sep 8, 2018 at 19:45

D-Shih's user avatar

D-ShihD-Shih

44.6k6 gold badges29 silver badges50 bronze badges

1

I’ve set up a table accordingly:

CREATE TABLE raw (
    id          SERIAL,
    regtime     float NOT NULL,
    time        float NOT NULL,
    source      varchar(15),
    sourceport  INTEGER,
    destination varchar(15),
    destport    INTEGER,
    blocked     boolean
); ... + index and grants

I’ve successfully used this table for a while now, and all of a sudden the following insert doesn’t work any longer..

INSERT INTO raw(
    time, regtime, blocked, destport, sourceport, source, destination
) VALUES (
    1403184512.2283964, 1403184662.118, False, 2, 3, '192.168.0.1', '192.168.0.2'
);

The error is: ERROR: integer out of range

Not even sure where to begin debugging this.. I’m not out of disk-space and the error itself is kinda discreet.

Содержание

  1. ОШИБКА 1264 (22003): значение вне диапазона для столбца median_comments в строке 1
  2. 2 ответа
  3. ошибка postgresql — ОШИБКА: ввод вне допустимого диапазона
  4. 6 ответы
  5. Ошибка MySQL 1264: значение вне допустимого диапазона для столбца
  6. tl; dr
  7. Объяснение
  8. Решение
  9. Postgres: целое число вне допустимого диапазона. Почему возникает эта ошибка?
  10. BIGINT UNSIGNED VALUE находится вне диапазона моего SQL
  11. 7 ответов

ОШИБКА 1264 (22003): значение вне диапазона для столбца median_comments в строке 1

Я получаю такую ​​ошибку:

ОШИБКА 1264 (22003): значение вне диапазона для столбца median_comments в строке 1

После выполнения этого запроса:

Я не уверен, почему это не работает с этим числом, которое не имеет десятичных знаков и состоит всего из 4 цифр.

2 ответа

Вы используете DECIMAL(10,8) , что означает, что максимальное количество цифр перед десятичным будет (10 — = 2 .

Синтаксис объявления для столбца DECIMAL — DECIMAL (M, D). Диапазоны значений аргументов следующие:

  1. М — максимальное количество цифр (точность). Он имеет диапазон от 1 до 65.
  2. D — количество цифр справа от десятичной точки (шкала). Он имеет диапазон от 0 до 30 и не должен быть больше M.

Чтобы исправить ошибку, измените тип данных на DECIMAL(10,2) .

Если вы используете десятичный (10,8) в качестве типа данных, это означает, что вы указываете 8 цифр после десятичного разряда, что оставляет только (10-8, т.е. 2 цифры) для всего вашего числа.

В этом случае, поскольку ваш номер 1347 содержит 4 цифры (целое число), вы получаете сообщение об ошибке «Значение вне допустимого диапазона», поскольку вам разрешено только 2.

Вам следует подумать об изменении его как минимум на десятичное (12,8), что даст вам 4 цифры для всей вашей числовой части, и ваша вышеуказанная команда должна работать.

Источник

Функция ниже продолжает возвращать это сообщение об ошибке. Я подумал, что, возможно, это вызвано типом поля double_precision, и я попытался использовать CAST, но либо это не так, либо я сделал это неправильно. Помогите?

задан 28 марта ’10, 12:03

6 ответы

И какой запрос вы выполняете, чтобы получить эту ошибку?

Вы смотрели вклад? Имеет также функции для этого типа расчеты.

ответ дан 28 мар ’10, в 16:03

Нет, я никогда не видел этого раньше. Хотя выглядит неплохо. У вас есть ссылка или пример того, как это использовать? Мне непонятно, как передать ему радиус, который вы хотите рассчитать (например, если центральная точка находится на -77, 30, и вы хотите найти все точки в радиусе 20 миль) — КофеинIV

Извините, я не могу вам помочь. Просто попробуйте и посмотрите, может ли это решить вашу проблему. — Фрэнк Хайкенс

Немного поздно, но возникла та же проблема, и это происходит потому, что параметр acos находится за пределами [-1,1] (возможно, 1.01), прежде чем вычислять ACOS, вы должны указать это значение как INTEGER

ответ дан 04 апр.

Это не может быть правдой, ты в конечном итоге все сделаешь 0 or 1 — Тим Абелл

Взгляните на это решение:

Проблема действительно заключалась в том, что ACOS() находился за пределами диапазона [-1,1], и это произошло потому, что он вычислял расстояние между одной и той же парой LAT, LONG (то же самое местоположение).

Я добавил WHERE L1.ID <> L2.ID, чтобы остановить рефлексивное вычисление.

Мартин ван Остерхаут писал:

В сб, 18 августа 2007 г., в 03:21:02 -0700:XNUMX, dustov написал:

В моей базе данных только что была эта новая ошибка, и я понятия не имею, почему (потому что я намеренно не вносил никаких изменений в эту таблицу). У кого-нибудь есть идея, какой вход находится вне диапазона или в чем может быть проблема?

Единственное, что я могу представить в вашем запросе вне допустимого диапазона, это ACOS(), значение которого должно быть между -1 и 1 (иначе результат будет сложным).

Я бы попытался посмотреть, каковы аргументы в пользу ACOS, но, вероятно, это какой-то крайний случай, когда округление доставит вас.

Надеюсь, что это помогает,

У меня была такая же ошибка с вычислением расстояния между координатами, но приведенный выше совет решил мою проблему.

Источник

Ошибка MySQL 1264: значение вне допустимого диапазона для столбца

Поскольку я использую SET cust_fax в таблице в MySQL вот так:

а затем я вставляю такое значение:

но потом он говорит

`error 1264` out of value for column

И я хочу знать, где ошибка? Мой набор? Или другой?

Любой ответ будет оценен по достоинству!

Значение 3172978990 больше, чем 2147483647 — максимальное значение для INT — отсюда и ошибка. Здесь перечислены целочисленные типы MySQL и их диапазоны .

Также обратите внимание, что (10) in INT(10) не определяет «размер» целого числа. Он определяет ширину отображения столбца. Эта информация носит рекомендательный характер.

Чтобы исправить ошибку, измените тип данных на VARCHAR . Номера телефона и факса следует хранить в виде строк. См. Это обсуждение .

Вы также можете изменить тип данных на bigInt, и это решит вашу проблему. Не рекомендуется хранить целые числа в виде строк, если в этом нет необходимости. 🙂

Вы превышаете длину типа данных int . Вы можете использовать атрибут UNSIGNED для поддержки этого значения.

SIGNED INT может поддерживать до 2147483647, а с UNSIGNED INT позволяет вдвое больше. После этого вы все еще хотите сохранить данные, чем использовать CHAR или VARCHAR с длиной 10

tl; dr

Убедитесь, что вы AUTO_INCREMENT не находитесь за пределами досягаемости. В этом случае установите для него новое значение:

Объяснение

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

Решение

Если это причина вашей проблемы, вы можете исправить ее, установив AUTO_INCREMENT на единицу больше, чем идентификатор последней строки. Итак, если идентификатор вашей последней строки равен 100, тогда:

Если вы хотите проверить AUTO_INCREMENT текущее значение, используйте эту команду :

Источник

Postgres: целое число вне допустимого диапазона. Почему возникает эта ошибка?

У меня два вопроса. Я ожидаю, что оба вставят одно и то же значение: 429496729600 , но один из них не работает из-за ошибки:

Почему возникает ошибка при первом запросе?

UPD
Забудьте указать, что тип amount — это bigint , а

Ваше число больше целого. Перед вставкой первой вставки выполняется вычисление. Когда вы умножаете целое число, postgres ожидает в качестве результата целое число. Это не так.

int максимальное значение 2 31 -1, первое значение обновления больше, чем оно, поэтому вызывает ошибку.

Вы можете попробовать сделать столбец amount для типа BIGINT

BIGINT -9223372036854775808 to 9223372036854775807

РЕДАКТИРОВАТЬ

мы можем использовать pg_typeof , чтобы проверить это.

Запрос №1

postgresql позволит 429496729600 быть BIGINT из-за значения, превышающего диапазон int.

Запрос №2

Когда вы делаете умножение на число, которое будет переведено в int .

Запрос

Вы можете использовать 400*1024*1024*1024:: BIGINT , позволяя int конвертировать в bigint .

хорошо спасибо. Покажи мне проблему. но другой ответ покажет, как решить эту проблему.

Источник

BIGINT UNSIGNED VALUE находится вне диапазона моего SQL

Я получаю следующую ошибку

#1690-значение без знака BIGINT находится вне диапазона в ‘ ( legends . spawns . quantity — tmp_field )’

Я смотрел на него некоторое время, запрос длинный, извините.

порождает таблицу-count game_moblist.spawn_id is 0 для всех возможных строк, кроме 1 (я удалил строку, чтобы проверить запрос)

данные в противном случае довольно длинные и не имеют отношения к моему вопросу Я думаю

любые идеи, как обойти эту ошибку?

7 ответов

начиная с MySQL 5.5.5, переполнение во время оценки числового выражения приводит к ошибке. Например, наибольшее значение bigint со знаком 9223372036854775807, поэтому следующее выражение создает ошибку.

чтобы операция прошла успешно, преобразуйте значение unsigned;

изменение части вашего запроса, как показано ниже, решит проблему.

в противном случае вам может потребоваться изменить sql_mode о неподписанных операций.

а затем запустите запрос, чтобы получить желаемый результат.

см. также аналогичную публикацию на форуме здесь.

Я действительно нашел этот вопрос, почему я искал решение. Если у вас такая же проблема, как и у меня, попробуйте отключить параметр «unsigned».

вполне возможно, что ваш код не здесь:

потому что, если результат этой математической операции меньше нуля, он потерпит неудачу с параметром «unsigned».

У меня была та же проблема, она произошла на соединении и не могла понять, что происходит, в конце концов, это была опечатка в предложении ON, где я поместил знак минус вместо знака равенства. Может быть, глупо, но я просто не видел этого около 30 минут, и, возможно, это может кому-то помочь.

дополнительный способ-использовать MySQL, если оператора. Это помогло мне, когда оба столбца были BIGINT and Unsigned .

другой возможной причиной, по-видимому, является то, как выделяется тип переменной результата.

ошибка 1690 (22003): значение без знака BIGINT находится вне диапазона в ‘(1 — ((1 / 1.045) ^ markov . tbl_EUR_PDH . term_06 ))’

делает то, что можно было бы ожидать (обратите внимание, что я просто заменяю «1»на » 1.0″)

чтобы обобщить правило, MySQL теперь откажется вычитать беззнаковый операнд из подписанного.

пример : SELECT A — B; завершится ошибкой, если A подписан, А B-без знака.

обходные пути: добавьте фактор 1.0 в подписанный операнд, чтобы он неявно бросал его в FLOAT или использовал CAST (B AS SIGNED) , или даже swap (B — A) и измените алгоритм соответствующим образом.

sql_mode работал в mysql client и Adminer, но не в CodeIgniter, где это считается. Кастинг тоже не помог.

простая арифметическая операция сделала трюк:

Источник

ошибка postgresql — ОШИБКА: ввод вне допустимого диапазона

Функция ниже продолжает возвращать это сообщение об ошибке. Я подумал, что, возможно, это вызвано типом поля double_precision, и я попытался использовать CAST, но либо это не так, либо я сделал это неправильно. Помогите?

задан 28 марта ’10, 12:03

6 ответы

И какой запрос вы выполняете, чтобы получить эту ошибку?

Вы смотрели вклад? Имеет также функции для этого типа расчеты.

ответ дан 28 мар ’10, в 16:03

Нет, я никогда не видел этого раньше. Хотя выглядит неплохо. У вас есть ссылка или пример того, как это использовать? Мне непонятно, как передать ему радиус, который вы хотите рассчитать (например, если центральная точка находится на -77, 30, и вы хотите найти все точки в радиусе 20 миль) — КофеинIV

Извините, я не могу вам помочь. Просто попробуйте и посмотрите, может ли это решить вашу проблему. — Фрэнк Хайкенс

Немного поздно, но возникла та же проблема, и это происходит потому, что параметр acos находится за пределами [-1,1] (возможно, 1.01), прежде чем вычислять ACOS, вы должны указать это значение как INTEGER

ответ дан 04 апр.

Это не может быть правдой, ты в конечном итоге все сделаешь 0 or 1 — Тим Абелл

Взгляните на это решение:

Проблема действительно заключалась в том, что ACOS() находился за пределами диапазона [-1,1], и это произошло потому, что он вычислял расстояние между одной и той же парой LAT, LONG (то же самое местоположение).

Я добавил WHERE L1.ID <> L2.ID, чтобы остановить рефлексивное вычисление.

Мартин ван Остерхаут писал:

В сб, 18 августа 2007 г., в 03:21:02 -0700:XNUMX, dustov написал:

В моей базе данных только что была эта новая ошибка, и я понятия не имею, почему (потому что я намеренно не вносил никаких изменений в эту таблицу). У кого-нибудь есть идея, какой вход находится вне диапазона или в чем может быть проблема?

Единственное, что я могу представить в вашем запросе вне допустимого диапазона, это ACOS(), значение которого должно быть между -1 и 1 (иначе результат будет сложным).

Я бы попытался посмотреть, каковы аргументы в пользу ACOS, но, вероятно, это какой-то крайний случай, когда округление доставит вас.

Надеюсь, что это помогает,

У меня была такая же ошибка с вычислением расстояния между координатами, но приведенный выше совет решил мою проблему.

Источник

ОШИБКА 1264 (22003): значение вне диапазона для столбца median_comments в строке 1

Я получаю такую ​​ошибку:

ОШИБКА 1264 (22003): значение вне диапазона для столбца median_comments в строке 1

После выполнения этого запроса:

Я не уверен, почему это не работает с этим числом, которое не имеет десятичных знаков и состоит всего из 4 цифр.

2 ответа

Вы используете DECIMAL(10,8) , что означает, что максимальное количество цифр перед десятичным будет (10 — = 2 .

Синтаксис объявления для столбца DECIMAL — DECIMAL (M, D). Диапазоны значений аргументов следующие:

  1. М — максимальное количество цифр (точность). Он имеет диапазон от 1 до 65.
  2. D — количество цифр справа от десятичной точки (шкала). Он имеет диапазон от 0 до 30 и не должен быть больше M.

Чтобы исправить ошибку, измените тип данных на DECIMAL(10,2) .

Если вы используете десятичный (10,8) в качестве типа данных, это означает, что вы указываете 8 цифр после десятичного разряда, что оставляет только (10-8, т.е. 2 цифры) для всего вашего числа.

В этом случае, поскольку ваш номер 1347 содержит 4 цифры (целое число), вы получаете сообщение об ошибке «Значение вне допустимого диапазона», поскольку вам разрешено только 2.

Вам следует подумать об изменении его как минимум на десятичное (12,8), что даст вам 4 цифры для всей вашей числовой части, и ваша вышеуказанная команда должна работать.

Источник

SQLSTATE [22003]: Числовое значение вне диапазона: 1264 Значение вне диапазона

в моем десятичном формате с сервера WAMP является десятичным (5,2) My QueryException:

SQLSTATE [22003]: Числовое значение вне диапазона: 1264 Из значения диапазона для столбца ‘converted_1000ml’ в строке 1 (SQL: вставка в inventory_databanks ( product_desc , nc_os , ncos_value , del , ei , sa , wh , bi , brand , variant , type , content , conversion_1000ml , **converted_1000ml** , os , bo , peso_sales , bo_case , os_case , del_case , wh_case , sa_case , price , facing , maker , merchandiser_name , complete_address , source_type , payroll_period , cellphone , schedule , area , region , province , city_municipality , outlet , edi_branch , salesman , ns_case1 , ns_case2 , ns_case3 , ns_bottles1 , ns_bottles2 , ns_bottles3 , ns_date1 , ns_date2 , ns_date3 , date_started , inventory_date , updated_at , created_at Значения) (Emperador_Light 1000 мл Светло — бренди, с запасами, с запасами, 2400 , 4734, 78, 4656 , 245, Emperador_Light, коньяк, оригинал, 1000, 1.00, 4734,00, 0, 0, -229790, 0, 0, 0, 0, 0, 110.00, 13, EDI, Родольфо Сионгко-младший, null, Из инвентарного листа, 16.01.2018 — 31.01.2018, 09303243249, T-TH-S, Центральный Лусон, регион III, Батаан, Маривелес, CORA’S, Филиал Пампанга, Ангелито Кетуа, 0, 0, 0, 0, 0, 0, 2018-01-31, 2018-01-31, 2018-01-31, 2018-01-16, 1970-01- 01, 2018-02-08 08:49:48, 2018-02-08 08:49:48))

Как я могу это исправить? жирные числа, я думаю, это моя проблема

decimal (5,2) имеет диапазон от -999,99 до 999,99. Вам придется изменить этот столбец, чтобы хранить большие значения.

In this example, 5 is the precision and 2 is the scale. The precision represents the number of significant digits that are stored for values, and the scale represents the number of digits that can be stored following the decimal point.

Standard SQL requires that DECIMAL(5,2) be able to store any value with five digits and two decimals, so values that can be stored in the salary column range from -999.99 to 999.99.

Источник

Ошибка MySQL 1264: значение вне допустимого диапазона для столбца

Поскольку я использую SET cust_fax в таблице в MySQL вот так:

а затем я вставляю такое значение:

но потом он говорит

`error 1264` out of value for column

И я хочу знать, где ошибка? Мой набор? Или другой?

Любой ответ будет оценен по достоинству!

Значение 3172978990 больше, чем 2147483647 — максимальное значение для INT — отсюда и ошибка. Здесь перечислены целочисленные типы MySQL и их диапазоны .

Также обратите внимание, что (10) in INT(10) не определяет «размер» целого числа. Он определяет ширину отображения столбца. Эта информация носит рекомендательный характер.

Чтобы исправить ошибку, измените тип данных на VARCHAR . Номера телефона и факса следует хранить в виде строк. См. Это обсуждение .

Вы также можете изменить тип данных на bigInt, и это решит вашу проблему. Не рекомендуется хранить целые числа в виде строк, если в этом нет необходимости. 🙂

Вы превышаете длину типа данных int . Вы можете использовать атрибут UNSIGNED для поддержки этого значения.

SIGNED INT может поддерживать до 2147483647, а с UNSIGNED INT позволяет вдвое больше. После этого вы все еще хотите сохранить данные, чем использовать CHAR или VARCHAR с длиной 10

tl; dr

Убедитесь, что вы AUTO_INCREMENT не находитесь за пределами досягаемости. В этом случае установите для него новое значение:

Объяснение

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

Решение

Если это причина вашей проблемы, вы можете исправить ее, установив AUTO_INCREMENT на единицу больше, чем идентификатор последней строки. Итак, если идентификатор вашей последней строки равен 100, тогда:

Если вы хотите проверить AUTO_INCREMENT текущее значение, используйте эту команду :

Источник

PostgreSql: отключить числовое значение вне диапазона

Я создаю API с PHP и PostgreSQL. Это один из вопросов, которые я использую:

Столбец «id» является целым числом, и мне не нужен более крупный тип. ? заменяется значением, исходящим от пользователя.

Но если пользователь отправляет слишком большое целое число (9999999999999), PostgreSQL возвращает ошибку:

SQLSTATE [22003]: числовое значение за пределами допустимого диапазона: 7 ERROR: значение »9999999999999999999999999 » вне диапазона для целочисленного типа

Должен ли я проверить переполнение в логике PHP?

Могу ли я превратить эту ошибку в предупреждение? Тот же запрос на MySQL не подводит.

«Тот же запрос на MySQL не подводит» не является отличной рекомендацией (если вы не используете MySQL в режиме ANSI STRICT). MySQL принимает 0000-00-00 как дату, принуждает недействительные записи к нулям в местах и т.д., И часто делает это с максимальным предупреждением, чтобы сообщить вам, что это искалечило ваши данные.

Тем не менее, я бы хотел, чтобы PostgreSQL предлагал варианты функций преобразования типов, которые возвращали код ошибки/возвращали null, поэтому я мог явно писать:

Вы можете написать такую функцию в PL/PgSQL, но она неэффективна, и там нет встроенного.

Хотя я очень рад, что PostgreSQL не будет калечить мои данные, не будучи спрошенными, бывают случаи, когда я предпочитаю, чтобы он искажал мои данные, когда я его просил.

  • Сначала проверьте на стороне приложения;
  • Пусть база данных обеспечивает целостность; а также
  • Ошибки ловушки и сообщить об этом пользователю. Вы можете SQLSTATE возврат SQLSTATE чтобы узнать подробности об ошибке.

PostgreSQL не имеет опции «вставить неверные данные с предупреждениями».

Источник

Импортирую данные через DBeaver(Postgres)

Error occurred during batch insert
(you can disable batch insert in order to skip particular rows).

Причина:
 SQL Error [22003]: Batch entry 0 INSERT INTO public.standard ("number",fio)
    VALUES (79013657371,'��������') was aborted: ОШИБКА: целое вне диапазона  Call getNextException to see other errors in the batch.

В самом файле:

79013657371,Ярослава

Ему не нравится русские сиволы я так полагаю, но какую кодировку и на что поставить?

Ответы (1 шт):

src/backend/po/ru.po-msgid "integer out of range"
src/backend/po/ru.po:msgstr "целое вне диапазона"

Кириллица определённо не должна вызывать ошибку integer out of range. Проверьте тип данных поля number, подходящий ли у него тип данных. Тип integer однозначно не годится.

Затем смотрите, нет ли в таблице каких триггеров или generated columns или default nextval, не вызывают ли переполнение int какие-то другие условия.

→ Ссылка

Содержание

  1. ОШИБКА 1264 (22003): значение вне диапазона для столбца median_comments в строке 1
  2. 2 ответа
  3. ошибка postgresql — ОШИБКА: ввод вне допустимого диапазона
  4. 6 ответы
  5. Ошибка MySQL 1264: значение вне допустимого диапазона для столбца
  6. tl; dr
  7. Объяснение
  8. Решение
  9. Postgres: целое число вне допустимого диапазона. Почему возникает эта ошибка?
  10. BIGINT UNSIGNED VALUE находится вне диапазона моего SQL
  11. 7 ответов

ОШИБКА 1264 (22003): значение вне диапазона для столбца median_comments в строке 1

Я получаю такую ​​ошибку:

ОШИБКА 1264 (22003): значение вне диапазона для столбца median_comments в строке 1

После выполнения этого запроса:

Я не уверен, почему это не работает с этим числом, которое не имеет десятичных знаков и состоит всего из 4 цифр.

2 ответа

Вы используете DECIMAL(10,8) , что означает, что максимальное количество цифр перед десятичным будет (10 — = 2 .

Синтаксис объявления для столбца DECIMAL — DECIMAL (M, D). Диапазоны значений аргументов следующие:

  1. М — максимальное количество цифр (точность). Он имеет диапазон от 1 до 65.
  2. D — количество цифр справа от десятичной точки (шкала). Он имеет диапазон от 0 до 30 и не должен быть больше M.

Чтобы исправить ошибку, измените тип данных на DECIMAL(10,2) .

Если вы используете десятичный (10,8) в качестве типа данных, это означает, что вы указываете 8 цифр после десятичного разряда, что оставляет только (10-8, т.е. 2 цифры) для всего вашего числа.

В этом случае, поскольку ваш номер 1347 содержит 4 цифры (целое число), вы получаете сообщение об ошибке «Значение вне допустимого диапазона», поскольку вам разрешено только 2.

Вам следует подумать об изменении его как минимум на десятичное (12,8), что даст вам 4 цифры для всей вашей числовой части, и ваша вышеуказанная команда должна работать.

Источник

ошибка postgresql — ОШИБКА: ввод вне допустимого диапазона

Функция ниже продолжает возвращать это сообщение об ошибке. Я подумал, что, возможно, это вызвано типом поля double_precision, и я попытался использовать CAST, но либо это не так, либо я сделал это неправильно. Помогите?

задан 28 марта ’10, 12:03

6 ответы

И какой запрос вы выполняете, чтобы получить эту ошибку?

Вы смотрели вклад? Имеет также функции для этого типа расчеты.

ответ дан 28 мар ’10, в 16:03

Нет, я никогда не видел этого раньше. Хотя выглядит неплохо. У вас есть ссылка или пример того, как это использовать? Мне непонятно, как передать ему радиус, который вы хотите рассчитать (например, если центральная точка находится на -77, 30, и вы хотите найти все точки в радиусе 20 миль) — КофеинIV

Извините, я не могу вам помочь. Просто попробуйте и посмотрите, может ли это решить вашу проблему. — Фрэнк Хайкенс

Немного поздно, но возникла та же проблема, и это происходит потому, что параметр acos находится за пределами [-1,1] (возможно, 1.01), прежде чем вычислять ACOS, вы должны указать это значение как INTEGER

ответ дан 04 апр.

Это не может быть правдой, ты в конечном итоге все сделаешь 0 or 1 — Тим Абелл

Взгляните на это решение:

Проблема действительно заключалась в том, что ACOS() находился за пределами диапазона [-1,1], и это произошло потому, что он вычислял расстояние между одной и той же парой LAT, LONG (то же самое местоположение).

Я добавил WHERE L1.ID <> L2.ID, чтобы остановить рефлексивное вычисление.

Мартин ван Остерхаут писал:

В сб, 18 августа 2007 г., в 03:21:02 -0700:XNUMX, dustov написал:

В моей базе данных только что была эта новая ошибка, и я понятия не имею, почему (потому что я намеренно не вносил никаких изменений в эту таблицу). У кого-нибудь есть идея, какой вход находится вне диапазона или в чем может быть проблема?

Единственное, что я могу представить в вашем запросе вне допустимого диапазона, это ACOS(), значение которого должно быть между -1 и 1 (иначе результат будет сложным).

Я бы попытался посмотреть, каковы аргументы в пользу ACOS, но, вероятно, это какой-то крайний случай, когда округление доставит вас.

Надеюсь, что это помогает,

У меня была такая же ошибка с вычислением расстояния между координатами, но приведенный выше совет решил мою проблему.

Источник

Ошибка MySQL 1264: значение вне допустимого диапазона для столбца

Поскольку я использую SET cust_fax в таблице в MySQL вот так:

а затем я вставляю такое значение:

но потом он говорит

`error 1264` out of value for column

И я хочу знать, где ошибка? Мой набор? Или другой?

Любой ответ будет оценен по достоинству!

Значение 3172978990 больше, чем 2147483647 — максимальное значение для INT — отсюда и ошибка. Здесь перечислены целочисленные типы MySQL и их диапазоны .

Также обратите внимание, что (10) in INT(10) не определяет «размер» целого числа. Он определяет ширину отображения столбца. Эта информация носит рекомендательный характер.

Чтобы исправить ошибку, измените тип данных на VARCHAR . Номера телефона и факса следует хранить в виде строк. См. Это обсуждение .

Вы также можете изменить тип данных на bigInt, и это решит вашу проблему. Не рекомендуется хранить целые числа в виде строк, если в этом нет необходимости. 🙂

Вы превышаете длину типа данных int . Вы можете использовать атрибут UNSIGNED для поддержки этого значения.

SIGNED INT может поддерживать до 2147483647, а с UNSIGNED INT позволяет вдвое больше. После этого вы все еще хотите сохранить данные, чем использовать CHAR или VARCHAR с длиной 10

tl; dr

Убедитесь, что вы AUTO_INCREMENT не находитесь за пределами досягаемости. В этом случае установите для него новое значение:

Объяснение

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

Решение

Если это причина вашей проблемы, вы можете исправить ее, установив AUTO_INCREMENT на единицу больше, чем идентификатор последней строки. Итак, если идентификатор вашей последней строки равен 100, тогда:

Если вы хотите проверить AUTO_INCREMENT текущее значение, используйте эту команду :

Источник

Postgres: целое число вне допустимого диапазона. Почему возникает эта ошибка?

У меня два вопроса. Я ожидаю, что оба вставят одно и то же значение: 429496729600 , но один из них не работает из-за ошибки:

Почему возникает ошибка при первом запросе?

UPD
Забудьте указать, что тип amount — это bigint , а

Ваше число больше целого. Перед вставкой первой вставки выполняется вычисление. Когда вы умножаете целое число, postgres ожидает в качестве результата целое число. Это не так.

int максимальное значение 2 31 -1, первое значение обновления больше, чем оно, поэтому вызывает ошибку.

Вы можете попробовать сделать столбец amount для типа BIGINT

BIGINT -9223372036854775808 to 9223372036854775807

РЕДАКТИРОВАТЬ

мы можем использовать pg_typeof , чтобы проверить это.

Запрос №1

postgresql позволит 429496729600 быть BIGINT из-за значения, превышающего диапазон int.

Запрос №2

Когда вы делаете умножение на число, которое будет переведено в int .

Запрос

Вы можете использовать 400*1024*1024*1024:: BIGINT , позволяя int конвертировать в bigint .

хорошо спасибо. Покажи мне проблему. но другой ответ покажет, как решить эту проблему.

Источник

BIGINT UNSIGNED VALUE находится вне диапазона моего SQL

Я получаю следующую ошибку

#1690-значение без знака BIGINT находится вне диапазона в ‘ ( legends . spawns . quantity — tmp_field )’

Я смотрел на него некоторое время, запрос длинный, извините.

порождает таблицу-count game_moblist.spawn_id is 0 для всех возможных строк, кроме 1 (я удалил строку, чтобы проверить запрос)

данные в противном случае довольно длинные и не имеют отношения к моему вопросу Я думаю

любые идеи, как обойти эту ошибку?

7 ответов

начиная с MySQL 5.5.5, переполнение во время оценки числового выражения приводит к ошибке. Например, наибольшее значение bigint со знаком 9223372036854775807, поэтому следующее выражение создает ошибку.

чтобы операция прошла успешно, преобразуйте значение unsigned;

изменение части вашего запроса, как показано ниже, решит проблему.

в противном случае вам может потребоваться изменить sql_mode о неподписанных операций.

а затем запустите запрос, чтобы получить желаемый результат.

см. также аналогичную публикацию на форуме здесь.

Я действительно нашел этот вопрос, почему я искал решение. Если у вас такая же проблема, как и у меня, попробуйте отключить параметр «unsigned».

вполне возможно, что ваш код не здесь:

потому что, если результат этой математической операции меньше нуля, он потерпит неудачу с параметром «unsigned».

У меня была та же проблема, она произошла на соединении и не могла понять, что происходит, в конце концов, это была опечатка в предложении ON, где я поместил знак минус вместо знака равенства. Может быть, глупо, но я просто не видел этого около 30 минут, и, возможно, это может кому-то помочь.

дополнительный способ-использовать MySQL, если оператора. Это помогло мне, когда оба столбца были BIGINT and Unsigned .

другой возможной причиной, по-видимому, является то, как выделяется тип переменной результата.

ошибка 1690 (22003): значение без знака BIGINT находится вне диапазона в ‘(1 — ((1 / 1.045) ^ markov . tbl_EUR_PDH . term_06 ))’

делает то, что можно было бы ожидать (обратите внимание, что я просто заменяю «1»на » 1.0″)

чтобы обобщить правило, MySQL теперь откажется вычитать беззнаковый операнд из подписанного.

пример : SELECT A — B; завершится ошибкой, если A подписан, А B-без знака.

обходные пути: добавьте фактор 1.0 в подписанный операнд, чтобы он неявно бросал его в FLOAT или использовал CAST (B AS SIGNED) , или даже swap (B — A) и измените алгоритм соответствующим образом.

sql_mode работал в mysql client и Adminer, но не в CodeIgniter, где это считается. Кастинг тоже не помог.

простая арифметическая операция сделала трюк:

Источник

Below is my table schema (I am using PostgreSQL 9.6.1)

  my_table
  ------------
  table_id SERIAL PRIMRY KEY,
  A1 INTEGER,
  A2 INTEGER,
  A3 INTEGER,
  A4 INTEGER,
  A5 INTEGER,
  A6 INTEGER,
  A7 INTEGER,
  A8 INTEGER,
  A9 INTEGER,
  A10 INTEGER,
  A11 INTEGER,
  A12 INTEGER,
  A13 INTEGER,
  A14 INTEGER,
  A15 INTEGER,
  A16 DOUBLE PRECISION,
  A17 DOUBLE PRECISION

and i am trying to run below query in order to create a new table.

CREATE TABLE my_table_2 AS
  SELECT
    B1                                              AS C1                           
    B3                                              AS C2,
    B5                                              AS C3,
    B7                                              AS C4 ,
    B9                                              AS C5,
    B11                                             AS C6 ,
    B1 / CAST( NULLIF(B3, 0) AS FLOAT)              AS C7,
    B1 / CAST( NULLIF(B5, 0) AS FLOAT)         AS C8,
    B1 / CAST( NULLIF(B7, 0) AS FLOAT)        AS C9,
    B1 / CAST( NULLIF(B9, 0) AS FLOAT)     AS C10,
    B1 / CAST( NULLIF(B11, 0) AS FLOAT)     AS C11,
    B3 / CAST( NULLIF(B5, 0) AS FLOAT)      AS C12,
    B5 / CAST( NULLIF(B7, 0 )* NULLIF(B9,0) AS FLOAT)  AS C13,

    B2                                    AS C14 ,
    B4                                  AS C15,
    B6                                    AS C16,
    B8                                  AS C17,
    B10                                AS C18,
    B12                                AS C19,
    B2 / CAST(NULLIF(B4, 0) AS FLOAT)  AS C20,
    B2 / CAST(NULLIF(B6, 0) AS FLOAT)  AS C21,
    B2 / CAST(NULLIF(B8, 0) AS FLOAT)  AS C22,
    B2 / CAST(NULLIF(B10, 0) AS FLOAT) AS C23,
    B2 / CAST(NULLIF(B12 , 0) AS FLOAT) AS C24
    B4 / CAST(NULLIF(B6 , 0) AS FLOAT)  AS C25
    B6 / CAST(NULLIF(B8,0) * NULLIF( B10,0) AS FLOAT) AS C26

    0.0 AS C27, 
    0.0 AS C28,
    0.0 AS C29,
    0.0 AS C30,
    0.0 AS C31,
    0.0 AS C32,
    0.0 AS C33,
    0.0 AS C34,
    0.0 AS C35,
    0.0 AS C36,
    0.0 AS C37,
    0.0 AS C38,
    0.0 AS C39,

    B13 AS C40
    B14 AS C41,
    B15 AS C42

  FROM (
         SELECT
           table_id,
           A1 - A2 + A3  AS B1,
           A1            AS B2,
           A4 - A5       AS B3,
           A4            AS B4,
           A6 - A7       AS B5,
           A6            AS B6,
           A8 - A9       AS B7,
           A8            AS B8,
           A10 - A11     AS B9,
           A10           AS B10,
           A12 - A13     AS B11,
           A12           AS B12,
           A14           AS B13,
           A15           AS B14,
           coalesce(coalesce(A16 * 100, 0) / NULLIF(A17, 0), 0) AS B15
         FROM my_table    
       ) v1;

I am running the above query as a background process using psql command
using below command

sudo -u postgres psql My_DB -X -a -f /tmp/test.sql > result.out 2>result.err &

Since my_table is a very huge table. But after sometime when I check result.err file. It has only one line saying

ERROR: integer out of range

For some sample ids in the WHere clause table gets generated without any issues but when i run it for entire table above error comes.

Can anyone explain why is this happening and how I can fix this?

Below is my table schema (I am using PostgreSQL 9.6.1)

  my_table
  ------------
  table_id SERIAL PRIMRY KEY,
  A1 INTEGER,
  A2 INTEGER,
  A3 INTEGER,
  A4 INTEGER,
  A5 INTEGER,
  A6 INTEGER,
  A7 INTEGER,
  A8 INTEGER,
  A9 INTEGER,
  A10 INTEGER,
  A11 INTEGER,
  A12 INTEGER,
  A13 INTEGER,
  A14 INTEGER,
  A15 INTEGER,
  A16 DOUBLE PRECISION,
  A17 DOUBLE PRECISION

and i am trying to run below query in order to create a new table.

CREATE TABLE my_table_2 AS
  SELECT
    B1                                              AS C1                           
    B3                                              AS C2,
    B5                                              AS C3,
    B7                                              AS C4 ,
    B9                                              AS C5,
    B11                                             AS C6 ,
    B1 / CAST( NULLIF(B3, 0) AS FLOAT)              AS C7,
    B1 / CAST( NULLIF(B5, 0) AS FLOAT)         AS C8,
    B1 / CAST( NULLIF(B7, 0) AS FLOAT)        AS C9,
    B1 / CAST( NULLIF(B9, 0) AS FLOAT)     AS C10,
    B1 / CAST( NULLIF(B11, 0) AS FLOAT)     AS C11,
    B3 / CAST( NULLIF(B5, 0) AS FLOAT)      AS C12,
    B5 / CAST( NULLIF(B7, 0 )* NULLIF(B9,0) AS FLOAT)  AS C13,

    B2                                    AS C14 ,
    B4                                  AS C15,
    B6                                    AS C16,
    B8                                  AS C17,
    B10                                AS C18,
    B12                                AS C19,
    B2 / CAST(NULLIF(B4, 0) AS FLOAT)  AS C20,
    B2 / CAST(NULLIF(B6, 0) AS FLOAT)  AS C21,
    B2 / CAST(NULLIF(B8, 0) AS FLOAT)  AS C22,
    B2 / CAST(NULLIF(B10, 0) AS FLOAT) AS C23,
    B2 / CAST(NULLIF(B12 , 0) AS FLOAT) AS C24
    B4 / CAST(NULLIF(B6 , 0) AS FLOAT)  AS C25
    B6 / CAST(NULLIF(B8,0) * NULLIF( B10,0) AS FLOAT) AS C26

    0.0 AS C27, 
    0.0 AS C28,
    0.0 AS C29,
    0.0 AS C30,
    0.0 AS C31,
    0.0 AS C32,
    0.0 AS C33,
    0.0 AS C34,
    0.0 AS C35,
    0.0 AS C36,
    0.0 AS C37,
    0.0 AS C38,
    0.0 AS C39,

    B13 AS C40
    B14 AS C41,
    B15 AS C42

  FROM (
         SELECT
           table_id,
           A1 - A2 + A3  AS B1,
           A1            AS B2,
           A4 - A5       AS B3,
           A4            AS B4,
           A6 - A7       AS B5,
           A6            AS B6,
           A8 - A9       AS B7,
           A8            AS B8,
           A10 - A11     AS B9,
           A10           AS B10,
           A12 - A13     AS B11,
           A12           AS B12,
           A14           AS B13,
           A15           AS B14,
           coalesce(coalesce(A16 * 100, 0) / NULLIF(A17, 0), 0) AS B15
         FROM my_table    
       ) v1;

I am running the above query as a background process using psql command
using below command

sudo -u postgres psql My_DB -X -a -f /tmp/test.sql > result.out 2>result.err &

Since my_table is a very huge table. But after sometime when I check result.err file. It has only one line saying

ERROR: integer out of range

For some sample ids in the WHere clause table gets generated without any issues but when i run it for entire table above error comes.

Can anyone explain why is this happening and how I can fix this?

Содержание

  1. ОШИБКА 1264 (22003): значение вне диапазона для столбца median_comments в строке 1
  2. 2 ответа
  3. ошибка postgresql — ОШИБКА: ввод вне допустимого диапазона
  4. 6 ответы
  5. Ошибка MySQL 1264: значение вне допустимого диапазона для столбца
  6. tl; dr
  7. Объяснение
  8. Решение
  9. Postgres: целое число вне допустимого диапазона. Почему возникает эта ошибка?
  10. BIGINT UNSIGNED VALUE находится вне диапазона моего SQL
  11. 7 ответов

ОШИБКА 1264 (22003): значение вне диапазона для столбца median_comments в строке 1

Я получаю такую ​​ошибку:

ОШИБКА 1264 (22003): значение вне диапазона для столбца median_comments в строке 1

После выполнения этого запроса:

Я не уверен, почему это не работает с этим числом, которое не имеет десятичных знаков и состоит всего из 4 цифр.

2 ответа

Вы используете DECIMAL(10,8) , что означает, что максимальное количество цифр перед десятичным будет (10 — 8) = 2 .

Синтаксис объявления для столбца DECIMAL — DECIMAL (M, D). Диапазоны значений аргументов следующие:

  1. М — максимальное количество цифр (точность). Он имеет диапазон от 1 до 65.
  2. D — количество цифр справа от десятичной точки (шкала). Он имеет диапазон от 0 до 30 и не должен быть больше M.

Чтобы исправить ошибку, измените тип данных на DECIMAL(10,2) .

Если вы используете десятичный (10,8) в качестве типа данных, это означает, что вы указываете 8 цифр после десятичного разряда, что оставляет только (10-8, т.е. 2 цифры) для всего вашего числа.

В этом случае, поскольку ваш номер 1347 содержит 4 цифры (целое число), вы получаете сообщение об ошибке «Значение вне допустимого диапазона», поскольку вам разрешено только 2.

Вам следует подумать об изменении его как минимум на десятичное (12,8), что даст вам 4 цифры для всей вашей числовой части, и ваша вышеуказанная команда должна работать.

Источник

ошибка postgresql — ОШИБКА: ввод вне допустимого диапазона

Функция ниже продолжает возвращать это сообщение об ошибке. Я подумал, что, возможно, это вызвано типом поля double_precision, и я попытался использовать CAST, но либо это не так, либо я сделал это неправильно. Помогите?

задан 28 марта ’10, 12:03

6 ответы

И какой запрос вы выполняете, чтобы получить эту ошибку?

Вы смотрели вклад? Имеет также функции для этого типа расчеты.

ответ дан 28 мар ’10, в 16:03

Нет, я никогда не видел этого раньше. Хотя выглядит неплохо. У вас есть ссылка или пример того, как это использовать? Мне непонятно, как передать ему радиус, который вы хотите рассчитать (например, если центральная точка находится на -77, 30, и вы хотите найти все точки в радиусе 20 миль) — КофеинIV

Извините, я не могу вам помочь. Просто попробуйте и посмотрите, может ли это решить вашу проблему. — Фрэнк Хайкенс

Немного поздно, но возникла та же проблема, и это происходит потому, что параметр acos находится за пределами [-1,1] (возможно, 1.01), прежде чем вычислять ACOS, вы должны указать это значение как INTEGER

ответ дан 04 апр.

Это не может быть правдой, ты в конечном итоге все сделаешь 0 or 1 — Тим Абелл

Взгляните на это решение:

Проблема действительно заключалась в том, что ACOS() находился за пределами диапазона [-1,1], и это произошло потому, что он вычислял расстояние между одной и той же парой LAT, LONG (то же самое местоположение).

Я добавил WHERE L1.ID <> L2.ID, чтобы остановить рефлексивное вычисление.

Мартин ван Остерхаут писал:

В сб, 18 августа 2007 г., в 03:21:02 -0700:XNUMX, dustov написал:

В моей базе данных только что была эта новая ошибка, и я понятия не имею, почему (потому что я намеренно не вносил никаких изменений в эту таблицу). У кого-нибудь есть идея, какой вход находится вне диапазона или в чем может быть проблема?

Единственное, что я могу представить в вашем запросе вне допустимого диапазона, это ACOS(), значение которого должно быть между -1 и 1 (иначе результат будет сложным).

Я бы попытался посмотреть, каковы аргументы в пользу ACOS, но, вероятно, это какой-то крайний случай, когда округление доставит вас.

Надеюсь, что это помогает,

У меня была такая же ошибка с вычислением расстояния между координатами, но приведенный выше совет решил мою проблему.

Источник

Ошибка MySQL 1264: значение вне допустимого диапазона для столбца

Поскольку я использую SET cust_fax в таблице в MySQL вот так:

а затем я вставляю такое значение:

но потом он говорит

`error 1264` out of value for column

И я хочу знать, где ошибка? Мой набор? Или другой?

Любой ответ будет оценен по достоинству!

Значение 3172978990 больше, чем 2147483647 — максимальное значение для INT — отсюда и ошибка. Здесь перечислены целочисленные типы MySQL и их диапазоны .

Также обратите внимание, что (10) in INT(10) не определяет «размер» целого числа. Он определяет ширину отображения столбца. Эта информация носит рекомендательный характер.

Чтобы исправить ошибку, измените тип данных на VARCHAR . Номера телефона и факса следует хранить в виде строк. См. Это обсуждение .

Вы также можете изменить тип данных на bigInt, и это решит вашу проблему. Не рекомендуется хранить целые числа в виде строк, если в этом нет необходимости. 🙂

Вы превышаете длину типа данных int . Вы можете использовать атрибут UNSIGNED для поддержки этого значения.

SIGNED INT может поддерживать до 2147483647, а с UNSIGNED INT позволяет вдвое больше. После этого вы все еще хотите сохранить данные, чем использовать CHAR или VARCHAR с длиной 10

tl; dr

Убедитесь, что вы AUTO_INCREMENT не находитесь за пределами досягаемости. В этом случае установите для него новое значение:

Объяснение

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

Решение

Если это причина вашей проблемы, вы можете исправить ее, установив AUTO_INCREMENT на единицу больше, чем идентификатор последней строки. Итак, если идентификатор вашей последней строки равен 100, тогда:

Если вы хотите проверить AUTO_INCREMENT текущее значение, используйте эту команду :

Источник

Postgres: целое число вне допустимого диапазона. Почему возникает эта ошибка?

У меня два вопроса. Я ожидаю, что оба вставят одно и то же значение: 429496729600 , но один из них не работает из-за ошибки:

Почему возникает ошибка при первом запросе?

UPD
Забудьте указать, что тип amount — это bigint , а

Ваше число больше целого. Перед вставкой первой вставки выполняется вычисление. Когда вы умножаете целое число, postgres ожидает в качестве результата целое число. Это не так.

int максимальное значение 2 31 -1, первое значение обновления больше, чем оно, поэтому вызывает ошибку.

Вы можете попробовать сделать столбец amount для типа BIGINT

BIGINT -9223372036854775808 to 9223372036854775807

РЕДАКТИРОВАТЬ

мы можем использовать pg_typeof , чтобы проверить это.

Запрос №1

postgresql позволит 429496729600 быть BIGINT из-за значения, превышающего диапазон int.

Запрос №2

Когда вы делаете умножение на число, которое будет переведено в int .

Запрос

Вы можете использовать 400*1024*1024*1024:: BIGINT , позволяя int конвертировать в bigint .

хорошо спасибо. Покажи мне проблему. но другой ответ покажет, как решить эту проблему.

Источник

BIGINT UNSIGNED VALUE находится вне диапазона моего SQL

Я получаю следующую ошибку

#1690-значение без знака BIGINT находится вне диапазона в ‘ ( legends . spawns . quantity — tmp_field )’

Я смотрел на него некоторое время, запрос длинный, извините.

порождает таблицу-count game_moblist.spawn_id is 0 для всех возможных строк, кроме 1 (я удалил строку, чтобы проверить запрос)

данные в противном случае довольно длинные и не имеют отношения к моему вопросу Я думаю

любые идеи, как обойти эту ошибку?

7 ответов

начиная с MySQL 5.5.5, переполнение во время оценки числового выражения приводит к ошибке. Например, наибольшее значение bigint со знаком 9223372036854775807, поэтому следующее выражение создает ошибку.

чтобы операция прошла успешно, преобразуйте значение unsigned;

изменение части вашего запроса, как показано ниже, решит проблему.

в противном случае вам может потребоваться изменить sql_mode о неподписанных операций.

а затем запустите запрос, чтобы получить желаемый результат.

см. также аналогичную публикацию на форуме здесь.

Я действительно нашел этот вопрос, почему я искал решение. Если у вас такая же проблема, как и у меня, попробуйте отключить параметр «unsigned».

вполне возможно, что ваш код не здесь:

потому что, если результат этой математической операции меньше нуля, он потерпит неудачу с параметром «unsigned».

У меня была та же проблема, она произошла на соединении и не могла понять, что происходит, в конце концов, это была опечатка в предложении ON, где я поместил знак минус вместо знака равенства. Может быть, глупо, но я просто не видел этого около 30 минут, и, возможно, это может кому-то помочь.

дополнительный способ-использовать MySQL, если оператора. Это помогло мне, когда оба столбца были BIGINT and Unsigned .

другой возможной причиной, по-видимому, является то, как выделяется тип переменной результата.

ошибка 1690 (22003): значение без знака BIGINT находится вне диапазона в ‘(1 — ((1 / 1.045) ^ markov . tbl_EUR_PDH . term_06 ))’

делает то, что можно было бы ожидать (обратите внимание, что я просто заменяю «1»на » 1.0″)

чтобы обобщить правило, MySQL теперь откажется вычитать беззнаковый операнд из подписанного.

пример : SELECT A — B; завершится ошибкой, если A подписан, А B-без знака.

обходные пути: добавьте фактор 1.0 в подписанный операнд, чтобы он неявно бросал его в FLOAT или использовал CAST (B AS SIGNED) , или даже swap (B — A) и измените алгоритм соответствующим образом.

sql_mode работал в mysql client и Adminer, но не в CodeIgniter, где это считается. Кастинг тоже не помог.

простая арифметическая операция сделала трюк:

Источник

не имею ни малейшего представления, какого черта это происходит..

Я установил таблицу соответственно:

CREATE TABLE raw (
    id          SERIAL,
    regtime     float NOT NULL,
    time        float NOT NULL,
    source      varchar(15),
    sourceport  INTEGER,
    destination varchar(15),
    destport    INTEGER,
    blocked     boolean
); ... + index and grants

я успешно использовал эту таблицу некоторое время, и внезапно следующая вставка больше не работает..

INSERT INTO raw(
    time, regtime, blocked, destport, sourceport, source, destination
) VALUES (
    1403184512.2283964, 1403184662.118, False, 2, 3, '192.168.0.1', '192.168.0.2'
);

ошибка: ERROR: integer out of range

Я имею в виду comon…
Даже не знаю, с чего начать отладку этого.. У меня нет дискового пространства, и сама ошибка довольно сдержанная..

1 ответов


SERIAL столбцы хранятся в виде INTEGERs, давая им максимальное значение 231-1. Итак, после ~2 миллиардов вставок, ваш новый id значения больше не будут соответствовать.

если вы ожидаете, что это много вставок в течение жизни вашей таблицы, создайте его с помощью BIGSERIAL (внутренне a BIGINT, с максимумом 263-1).

если вы обнаружите позже, что a SERIAL не достаточно большой, вы можете увеличить размер существующего поля с:

ALTER TABLE raw ALTER COLUMN id TYPE BIGINT;

обратите внимание, что это BIGINT здесь BIGSERIAL (as сериалы не настоящие типы). И имейте в виду, что если у вас действительно есть 2 млрд записей в таблице, это может занять некоторое время…


Импортирую данные через DBeaver(Postgres)

Error occurred during batch insert
(you can disable batch insert in order to skip particular rows).

Причина:
 SQL Error [22003]: Batch entry 0 INSERT INTO public.standard ("number",fio)
    VALUES (79013657371,'��������') was aborted: ОШИБКА: целое вне диапазона  Call getNextException to see other errors in the batch.

В самом файле:

79013657371,Ярослава

Ему не нравится русские сиволы я так полагаю, но какую кодировку и на что поставить?

Ответы (1 шт):

src/backend/po/ru.po-msgid "integer out of range"
src/backend/po/ru.po:msgstr "целое вне диапазона"

Кириллица определённо не должна вызывать ошибку integer out of range. Проверьте тип данных поля number, подходящий ли у него тип данных. Тип integer однозначно не годится.

Затем смотрите, нет ли в таблице каких триггеров или generated columns или default nextval, не вызывают ли переполнение int какие-то другие условия.

→ Ссылка

Возможно, вам также будет интересно:

  • Ошибка цветового круга проектор
  • Ошибка цветного картриджа hp ink tank 315
  • Ошибка цветного картриджа hp ink tank 110
  • Ошибка цветного картриджа hp 2130
  • Ошибка цветного картриджа hp 123

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии