mysql> desc Student;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| Roll_no | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(200) | YES | | NULL | |
| address | varchar(200) | YES | | NULL | |
| phone | int(100) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+---------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
mysql> insert into Student values(1,'Ram','Delhi',90404444389,18);
ОШИБКА 1264 (22003): значение вне допустимого диапазона для столбца «телефон» в строке 1
почему по ошибке..размер телефона 100 но почему вне диапазона ..
Поскольку телефонные номера, если их рассматривать как числа, выглядят как очень большие числа, большее, чем целое число, может содержать См. раздел 11.1.2 Целочисленные типы (точное значение) — INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT — person Bachan Ghatuary schedule 21.02.2020
Отвечает ли это на ваш вопрос? Как исправить ошибку ‘ Значение вне диапазона скорректировано с учетом ошибки столбца? — person Bachan Ghatuary schedule 21.02.2020
проверьте dev.mysql.com/doc/refman/8.0/en /integer-types.html для значений целочисленного диапазона, я предлагаю вам сделать это varchar
вместо этого! — person Bachan Ghatuary schedule 21.02.2020
И еще этот: dev.mysql.com/ doc / refman / 8.0 / en / numeric-type-attributes.html — person Bachan Ghatuary schedule 21.02.2020
Я думаю, вы неправильно поняли значение int (11). Int (11) не означает, что вы можете иметь целое число с одиннадцатью цифрами. В отличие от varachar (200), что означает, что вы можете хранить максимум 200 символов. Фактически, для типа Int число в круглых скобках сообщает вам размер одного целочисленного значения, и в этом случае это означает, что одно значение int хранится в 4 байтах, а номер телефона, который вы используете, намного больше этого. Я бы порекомендовал взять здесь stackoverflow.com/questions/4151259/ — person Bachan Ghatuary schedule 21.02.2020
Помимо проблем с хранением, номер телефона — это не число в смысле количества или чего-то, над чем вы хотите выполнять арифметические операции. Это строка, состоящая из цифр, поэтому в ней сохраняются ведущие нули, и вы можете выполнять с ней строковые операции, например проверять, начинается ли она с определенного кода области. — person Bachan Ghatuary schedule 21.02.2020
Потому что ваш номер вне диапазона для типа int. Вместо этого вы можете попробовать использовать bigint или сохранить столбец как varchar, что, вероятно, более уместно, как описано здесь.
См. этот ответ. Тип int всегда хранится в 4 байтах. Я думаю, вы неправильно понимаете, что делает (100), он просто контролирует ширину отображения.
Подробнее о числовых типах читайте в документации.
Максимальный размер целого числа со знаком в MySQL — 2 147 483 647.
90404444389 на 88,256,960,742 больше максимального значения.
Хотя они (обычно! Но не всегда!) Состоят из чисел, номера телефонов не целые. Не храните их в таком виде.
VARCHAR
гораздо более уместен.Я просто догадываюсь
Обычно это происходит из-за того, что номера телефонов очень длинные, а тип int ограничен. Например, 32-битное целое число (как положительное, так и отрицательное значение) может представлять максимальное число 2 * 147 * 483 * 648.
Таким образом, если номер телефона выглядит как 3 * 000 * 000 * 000, его невозможно прочитать как int32.
Маленькая точка Никогда не стоит начинать ответ с
I am guessing
— person Bachan Ghatuary; 21.02.2020Я объясню, почему написал, что предполагаю: в python нет проблем с чтением огромных чисел, потому что он меняет размер в Long, но на другом языке это может быть проблемой. Я не знаю, может ли это быть проблемой в его комбинации платформы / языка спасибо за совет, я буду решать его для следующих ответов — person Bachan Ghatuary; 21.02.2020