我有一个表单,从中获取要保存到数据库中的值。运行插入查询,它插入数据库,但问题是保存的电话号码看起来像这个号码" 2147483647"虽然在查询中我传递了数字9846586583.每次我插入它保存这个数字。
我设置的电话号码列的数据类型为int(16)
。
以下是显示正确查询的<?php $this->output->enable_profiler(true);?>
显示的查询
INSERT INTO `posts` (
`country`,
`city`,
`area`,
`street`,
`house_no`,
`house_type`,
`floor`,
`number_of_rooms`,
`price`,
`owners_phone`,
`posted_by`,
`featured_post`
)
VALUES
(
'nepal',
'pkr',
'ratekhoire',
'fulbari',
'45',
'1s',
'0',
'7',
'10000',
'9846586583',
'bhabi',
'Y'
)
答案 0 :(得分:0)
我实际上建议从int
更改为String
(即varchar(numOfDigits)
),以便您可以在电话号码中添加前缀零或加号。然后你可以用两个辅助方法解析它们。
int(16)
的最大值为32767,因为它只有2个字节= 16位(您可以通过将二进制值111111111111111
转换为十进制来检查它。
ADDITION 数字2147483647
的二进制等效值为(1100110011001100110011001100
,小于4个字节。(无符号将是十进制的两倍,但不是内存明智的)
答案 1 :(得分:0)
<强>原因:强>
2147483647是MySQL的最大 int
值
原因是因为有符号整数的最大值是2147483647.即使你指定INT(16)并不意味着你可以存储16的长度,因为最大允许值是2147483647. 16 in的含义INT声明是填充零的长度,仅在列上启用了ZEROFILL时才适用。但是长度最多不能达到16个字符。
如果您将原始数据保存为9846586583,则会将其截断为最大值2147483647.
的解决方案:强>
只需将数据类型从 int
更改为 bigint
或 varchar
。