gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:15:16 28 4
gpt4 key购买 nike

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

我可以使用下面的sql插入数据;

INSERT INTO 'table' ('spot') VALUES (GeomFromText('POINT(10 10)'));

如果我在 database/sql/driver 中使用 Value 接口(interface);

type Value interface{}

Value is a value that drivers must be able to handle. It is either nil or an instance of one of these types:

int64

float64

bool

[]byte

string [*] everywhere except from Rows.Next.

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类型是

最佳答案

请参阅下面的两个 url,其中概念是从中挖走的

架构

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

关于mysql - golang - mysql 驱动 - 数据库函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34234027/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com