golang-mysql驱动程序-数据库函数

golang-mysql驱动程序-数据库函数,mysql,go,go-gorm,Mysql,Go,Go Gorm,我创建了一个存储空间类型的结构,并创建了一个扫描函数来帮助查询数据库中的行。我在插入此类型时遇到问题 我可以使用以下sql插入数据 INSERT INTO 'table' ('spot') VALUES (GeomFromText('POINT(10 10)')); 如果在database/sql/driver中使用值接口 类型值接口{} 值是驱动程序必须能够处理的值。它是nil或以下类型之一的实例: int64 浮动64 布尔 []字节 字符串[*]除行以外的所有位置。下一步 时间,时间 并

我创建了一个存储空间类型的结构,并创建了一个扫描函数来帮助查询数据库中的行。我在插入此类型时遇到问题

我可以使用以下sql插入数据

INSERT INTO 'table' ('spot') VALUES (GeomFromText('POINT(10 10)'));
如果在database/sql/driver中使用值接口

类型值接口{}

值是驱动程序必须能够处理的值。它是nil或以下类型之一的实例:

int64

浮动64

布尔

[]字节

字符串[*]除行以外的所有位置。下一步

时间,时间

并使用此代码

func (p Point) Value() (driver.Value, error) {
    return "GeomFromText('" + p.ToWKT() + "')", nil
}
最后,我将以下sql语句发送到数据库

INSERT INTO 'table' ('spot') VALUES ('GeomFromText('POINT(10 10)')');
问题是函数GeomFromText在引号中。有没有办法避免这种情况?我正在使用gorm,并试图将原始sql查询保持在最低限度


数据库端使用的mysql类型是一个点。

请查看下面的两个URL,这两个URL是该概念的来源

模式 更新语句 验证 (打开“值编辑器”以查看blob时,该点将更新)


因此,我们需要在update语句中使用
concat()

通常,表名和列会用反勾号包装,或者什么都不包装。例如,如果列名是
limit
mycolumn
this this
您是否尝试过在查询中保留函数调用
GeomFromText
,并让您的
方法返回
p.ToWKT()
?感谢您的回复。我想我没有把我的困难说清楚。我的模式没有问题,我知道如何插入空间数据,这更像是sql驱动程序的问题。我知道
db.Exec(“INSERT-INTO'table'('spot')值(GeomFromText($1))”,p.ToWKT())
将起作用,但我试图避免使用原始sql查询usch。我知道我的代码失败的原因是因为
func(p点)Value()
返回一个字符串,而我的MySQL函数被置于引号中。有没有一种方法可以使用这个接口,并且只将字符串的一部分放在引号中?我遇到了同样的问题。这是在编写原始SQL查询吗?我不明白你是怎么做到的。
-- http://howto-use-mysql-spatial-ext.blogspot.com/

create table Points
(   id int auto_increment primary key,
    name VARCHAR(20) not null, 
    location Point NOT NULL, 
    description VARCHAR(200) not null, 
    SPATIAL INDEX(location),
    key(name)
)engine=MyISAM; -- for use of spatial indexes and avoiding error 1464

-- insert a row, so we can prove Update later will work
INSERT INTO Points (name, location, description) VALUES 
( 'point1' , GeomFromText( ' POINT(31.5 42.2) ' ) , 'some place');
-- concept borrowed from http://stackoverflow.com/a/7135890
UPDATE Points 
set location = PointFromText(CONCAT('POINT(',13.33,' ',26.48,')'))
where id=1;
select * from points;