Php 如何防止插入mysql数据库时小数舍入
我有一个奇怪的问题,每次我在数据库中插入或更新小数时,小数值都会四舍五入。例如,如果我插入Php 如何防止插入mysql数据库时小数舍入,php,mysql,laravel,Php,Mysql,Laravel,我有一个奇怪的问题,每次我在数据库中插入或更新小数时,小数值都会四舍五入。例如,如果我插入51.4988814,它将四舍五入到51.00000000 小数点是纬度和经度值 我用来插入数据库的代码是: $centre = Centre::updateOrCreate( ['wordpress_id' => $centre->ID], [ 'name' => $centre->post_title, 'postcode' =&
51.4988814
,它将四舍五入到51.00000000
小数点是纬度和经度值
我用来插入数据库的代码是:
$centre = Centre::updateOrCreate(
['wordpress_id' => $centre->ID],
[
'name' => $centre->post_title,
'postcode' => $centre->acf->postcode,
'lat' => 51.4988814,
'lng' => -0.1415936
]
);
表迁移如下所示:
Schema::create('centres', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('wordpress_id')->unsigned();
$table->string('name');
$table->string('postcode')->nullable();
$table->decimal('lat', 10, 8);
$table->decimal('lng', 11, 8);
$table->timestamps();
});
修复此问题的一次尝试是编辑我的php.ini
,并将精度=
更改为更高的数字(25),然后重新启动服务器,但这并没有纠正此问题
我还尝试在数据库中使用float而不是decimal
我也试过了
'lat' => (float)51.4988814,
'lng' => (float)-0.1415936
在updateOrCreate函数中
我现在没有主意了
编辑:
我已经添加了SHOW CREATE TABLES centres
CREATE TABLE `centres` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`wordpress_id` int(10) unsigned NOT NULL,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`postcode` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`lat` decimal(10,8) NOT NULL,
`lng` decimal(11,8) NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
这回答了你的问题吗?仔细检查你的中心模型,确保在这些字段上没有突变或其他任何东西。你打算用这些值做任何数学运算吗?如果没有,另存为text…@RussJ-他们已经在迁移中设置了比例和精度:
$table->decimal('lat',10,8)代码>10
是精度,8
是刻度。我知道你已经分享了你的迁移,这很好,但只是想再次检查一下,你是否也可以提供SHOW CREATE TABLE centres
输出?这是否回答了你的问题?仔细检查你的中心模型,确保在这些字段上没有突变或其他任何东西。你打算用这些值做任何数学运算吗?如果没有,另存为text…@RussJ-他们已经在迁移中设置了比例和精度:$table->decimal('lat',10,8)代码>10
是精度,8
是刻度。我知道您已经共享了迁移,这很好,但请再次检查,您是否也可以提供显示创建表格中心
输出?