当我尝试通过PHP输入值时,将存储2147483647。
注意:2147483647是int数据类型的最大大小,而不是mysql中的bigint。
答案 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)。