我创建了一个存储空间类型的结构,我创建了一个扫描函数来帮助查询数据库中的行。我在插入此类型时遇到问题。
我可以使用以下sql插入数据;
INSERT INTO 'table' ('spot') VALUES (GeomFromText('POINT(10 10)'));
如果我在 database / sql / driver ;
中使用Value接口输入Value interface {}
值是驱动程序必须能够处理的值。它是nil或其中一种类型的实例:
的int64
float64
BOOL
[]字节
除了Rows.Next。之外,string [*]
了time.time
并使用此代码;
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类型是 point 。
答案 0 :(得分:1)
请参阅下面的两个网址
挖出概念-- 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;
(当您打开值编辑器以查看blob时,点会更新)
因此,最重要的是使用更新语句中的concat()
。