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

时间:2015-12-11 23:06:51

标签: mysql go go-gorm

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

我可以使用以下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

1 个答案:

答案 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()