Как сохранить 10-значный номер в тип данных sql bigint? - PullRequest
0 голосов
/ 19 сентября 2018

Когда я пытаюсь ввести значение через PHP, 2147483647 сохраняется.

ПРИМЕЧАНИЕ: 2147483647 - это максимальный размер для типа данных int, не bigint в mysql.

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Максимальное значение, которое может быть сохранено в MySQL INT Тип данных 2147483647.

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

Это ожидаемое (т.е. документированное) поведение.

Ссылка: https://dev.mysql.com/doc/refman/5.7/en/integer-types.html

datataype     maximum signed value
---------     --------------------
TINYINT                        127
SMALLINT                     32767
MEDIUMINT                   388607
INT                     2147483647
BIGINT                      2^63-1

Если мы видим, как это поведение сохраняется в столбце BIGINT, то где-то в пути кодазначение было преобразовано в тип данных INT, который урезал значение до того, как значение было присвоено столбцу BIGINT.Это может произойти как возврат из вызова функции или при присвоении значения в TRIGGER и др.

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


Как сохранить значение в столбце BIGINT?

Мы можем отправить строковый литерал в операторе SQL.В качестве демонстрации двенадцать десятичных цифр

 CREATE TABLE foo (mycol BIGINT); 
 INSERT INTO foo (mycol) VALUES ('987645312745');
 SELECT mycol FROM foo;

         mycol
 -------------
  987645312745
0 голосов
/ 21 сентября 2018

Спасибо, ребята, что ответили на вопрос.Проблема была из-за того, что на стороне PHP выполнялась типизация, я по ошибке набрал значение (int) при получении ввода со страницы HTML.

0 голосов
/ 19 сентября 2018

Не вижу проблем:

create table my_number (
  val bigint
);

insert into my_number (val) values (1234567890);
insert into my_number (val) values (123456789012345678);

select * from my_number;

Результат:

val                   
----------------------
1234567890            
123456789012345678    

Редактировать: Добавление нового примера, опубликованного как комментарий:

CREATE TABLE contacts_db (
  Fname varchar(15) NOT NULL,
  Lname varchar(15) NOT NULL,
  Email varchar(35) NOT NULL,
  Phone bigint(10) UNSIGNED NOT NULL
);

insert into contacts_db (Fname, Lname, Email, Phone) 
                 values ('a', 'b', 'c', 1234567890);
insert into contacts_db (Fname, Lname, Email, Phone) 
                 values ('d', 'e', 'f', 123456789012345678);

select * from contacts_db;

Результат:

Fname  Lname  Email  Phone
-----  -----  -----  ------------------
a      b      c      1234567890
d      e      f      123456789012345678

По-прежнему хорошо работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...