golang-mysql驱动程序-数据库函数
我创建了一个存储空间类型的结构,并创建了一个扫描函数来帮助查询数据库中的行。我在插入此类型时遇到问题 我可以使用以下sql插入数据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 布尔 []字节 字符串[*]除行以外的所有位置。下一步 时间,时间 并
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;