如何将10位数字存储到sql bigint数据类型中?

时间:2018-09-19 20:00:47

标签: mysql sql database

当我尝试通过PHP输入值时,将存储2147483647。

注意:2147483647是int数据类型的最大大小,而不是mysql中的bigint。

3 个答案:

答案 0 :(得分:2)

可以存储在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

答案 1 :(得分:1)

我没看到问题:

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

仍然有效。

答案 2 :(得分:0)

感谢大家回答问题。问题是由于在PHP方面进行了类型转换,因此错误地在从HTML页面检索输入时将值转换为(int)。