Laravel将bigint插入MySQL错误



这是我的表结构

SET NAMES utf8;
SET foreign_key_checks = 0;
SET time_zone = '+07:00';
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
DROP TABLE IF EXISTS `merchants`;
CREATE TABLE `merchants` (
`id` bigint(20) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`url` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`address` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`work_hour` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

我的模型

<?php
namespace App;
use IlluminateDatabaseEloquentModel;
/**
* @property $name
* Class Merchant
* @package App
*/
class Merchant extends Model
{
/**
 * The table associated with the model
 * @var string
 */
protected $table = "merchants";
//
protected $fillable = [
    "name", "url", "address", "work_hour", "id"
];
public $incrementing = false;
}

echo php_int_size;//8echo php_int_max;//9223372036854775807

每次,我都会用ID插入新记录是一个bigint,在DB

中总是错误的
$merchant->id = $newId1;
$merchant->name = $request->name;
$merchant->url = $request->url;
$merchant->address = $request->address;
$merchant->work_hour = 'a';
$merchant->created_at = date('Y-m-d h:i:s');
$merchant->updated_at = date('Y-m-d h:i:s');
$merchant->save();

$ newid1 = 4550103638072627879;但是它显示在MySQL -2144066090

请帮助

根本原因不是变量类型。这是MySQL的PHP扩展的不当版本。

检查您的PHP版本。如果超过7.0,则应使用MySQLND驱动程序扩展名。MySQLND驱动程序将解决与MySQL有关的大整数和许多奇怪的问题。尝试。

您必须存储 bigints as string或float ,因此请尝试将Bingint值插入字符串,否则请更改数据从 bigint

键入 varchar

更改代码

$merchant->id = (string) $newId1;

它运行良好。

我不知道为什么:)

遇到了相同的问题。我已经在使用MySQLND扩展名。将其保存为字符串的技巧。

最新更新