我在php中使用Eloquent of Laravel来插入和查找记录。 会发生的是当我插入一个整数时,它在-1001094515039,它将其更改为-367135071并将其存储在字段中。 字段类型是Bigint,长度为20个字符,我已经尝试将其存储在文本类型字段和Varchar字段中,但同样的事情发生了。 另外当我在phpMyAdmin中手动将其更改为-1001094515039时,我尝试使用Eloquent的find方法找到它,它不会给我那个记录!
该脚本在我的第一台服务器上使用PHP 5.X,当前服务器使用php 7.x,我认为可能就是这种情况! 我尝试过选项,我们将MYSQL_ATTR_MAX_BUFFER_SIZE设置为16 * 1024 * 1024,但这也不起作用。
以下是int的最大值,最小值:
min int:-9223372036854775808 max int:9223372036854775807
任何解决方案?
更新:
这是我插入数据的方式:
$Group = new Group();
$Group->id = -1001094515039;
$Group->registerdate = "2017-02-03 00:56:01";
$Group->name = "Test Ginger 2";
$Group->owner_id = 81997375;
$Group->save();
var_dump($ Group-> save())结果是: http://textuploader.com/d1oo7
亮点:
[attributes:protected] => Array
(
[id] => -1001094515039
[registerdate] => 2017-02-03 00:56:01
[name] => Test Ginger 2
[owner_id] => 81997375
)
显示创建表格结果:
CREATE TABLE `groups` (
`id` bigint(20) NOT NULL,
`name` varchar(100) CHARACTER SET utf8mb4 NOT NULL,
`owner_id` int(11) NOT NULL,
`acive` tinyint(1) NOT NULL DEFAULT '0',
`autorounds` tinyint(1) NOT NULL DEFAULT '0',
`timezone` varchar(50) NOT NULL DEFAULT 'Pacific/Easter',
`registerdate` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `owner_id` (`owner_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
答案 0 :(得分:2)
您使用哪种数据类型来创建该字段?
尝试将大整数插入到int字段时,我遇到了问题。解决方法是将字段更改为bigint。
如果您使用Laravel进行迁移,则数据类型为:
$table->bigInteger('votes');
或者在MySQL中:
ALTER TABLE table_name MODIFY COLUMN column_name bigint;
有关不同整数类型的更多信息。 https://dev.mysql.com/doc/refman/5.5/en/integer-types.html
答案 1 :(得分:2)
我现在怀疑我理解这个问题。
我在php 5.5实例和php 7.0实例上运行了以下var_dumps。 dd(数组(' RawValue' => -1001094515039),数组('使用intval()' => intval(-1001094515039)),数组(' PHP版本' => phpversion()));
以下是结果:
数组:1 [▼ " RawValue" => -1001094515039.0 ] 数组:1 [▼ "使用intval()" => -367135071 ] 数组:1 [▼ " PHP版本" => " 5.5.12" ]
数组:1 [▼ " RawValue" => -1001094515039 ] 数组:1 [▼ "使用intval()" => -1001094515039 ] 数组:1 [▼ " PHP版本" => " 7.0.4" ]
此[link]中有更多信息:http://php.net/manual/en/function.intval.php,但我怀疑php中从5到7的原始数字和整数的更改导致了您的问题。将变量包装在intval()中可以解决您的问题。
希望这能解决你的问题!
答案 2 :(得分:0)
显然,它是php 7版本I使用的json相关问题。 插入到MySql的数据是从我从Telegram获得的json响应中提取的。
看起来它无法转换负数,因为无符号整数是可以的。 现在我在任何可能的负整数之前添加(string)关键字,问题就解决了。
$Group->id = (string) $this->FromChat()->ID;