数据上传显示数据库codeigniter中的不同值

时间:2014-09-13 07:12:16

标签: php mysql codeigniter

我有一个表单,从中获取要保存到数据库中的值。运行插入查询,它插入数据库,但问题是保存的电话号码看起来像这个号码" 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'
)

2 个答案:

答案 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