Point类型的默认值

Posted

技术标签:

【中文标题】Point类型的默认值【英文标题】:Default value of Point type 【发布时间】:2018-09-26 05:15:39 【问题描述】:

在 Laravel 迁移中,我应该使用什么作为 Point 类型列的默认值?我本来想保留它NULL 但后来我read 那个:

空间索引中的列必须声明为 NOT NULL。

那么我应该使用什么作为列的默认值以及如何在迁移中指定它来表示NULL,例如0,0-1,-1

$table->point('location')->default(???);

更新

做了更多的研究,我发现了一个更大的问题。 mysql 不允许为 POINT 类型列指定默认值。所以我必须在INSERT时间插入一个NULL-equivalent。为此目的,正确的值是多少?

【问题讨论】:

@Downvoter:有时我只是想知道...... 可能是->point('location') 而不是->point(location') @Egretos:是的。感谢您的意见。 你真的需要 MySQL 吗? @JonasStaudenmeir:感谢您的指点。不,我以前没有看到这个。看起来很多人都在为同样的问题而苦苦挣扎。我打算使用 (-1000, -1000) 作为我的 null 值,但不确定 MySQL 是否会对此感到满意。看起来北极足够冷,可以设置为空。 :) 【参考方案1】:

我不知道您是否是这种情况,但是如果您尝试向现有表添加列,然后在迁移时向该表添加空间索引,我发现在 MySQL 中解决此问题的方法是不是一个优雅的解决方案,但有效:

Schema::table('table', function(Blueprint $table)

    // Add the new nullable column
    $table->point('column')->nullable();
);
// You must separate this to ensure the execution order
Schema::table('table', function(Blueprint $table)

    // Insert the dummy values on the column
    DB::statement("UPDATE `table` SET `column` = POINT(0,90);");
    // Set the column to not null
    DB::statement("ALTER TABLE `table` CHANGE `column` `column` POINT NOT NULL;");

    // Finally add the spatial index
    $table->spatialIndex('column');
);

【讨论】:

这对我有用!我还尝试通过 $table->point('column')->nullable(false)->change() 将列更改为不可为空,但这会引发错误。所以,我必须像这个答案一样通过原始 SQL 来做。【参考方案2】:

使用 MariaDB,我可以成功插入:

->默认(DB::raw("POINT(0,90)"))

【讨论】:

感谢您的意见。不幸的是,我的虚拟主机不支持 MariaDB。 MySQL 是我唯一的选择。

以上是关于Point类型的默认值的主要内容,如果未能解决你的问题,请参考以下文章

设置Chart.js默认显示Point点的值不用鼠标经过才显示

c++中定义一个无符号的整形不赋值默认值是多少 unsigned int point;

禁用ggplots的cowplot默认值

SAP:未维护生成订单类型**的操作默认值

java的boolean类型的默认值不是false吗

MySQL数据类型 - 数据类型默认值