func (loc Location) GormValue(ctx context.Context, db *gorm.DB) clause.Expr {
return clause.Expr{
SQL: "POINT(?)",
Vars: []interface{}{fmt.Sprintf("%f, %f", loc.X, loc.Y)},
}
}
这是我的估价员。它创建了一个类似于POINT('XX.XXXXX, YY.YYYYY')
的查询。但是由于使用了单引号,所以此查询不起作用。我该如何解决这个问题?
一种解决方案可能是使用MySQL特定的函数,如GeomFromText
或PointFromText
,将字符串转换为空间数据类型。
func (loc Location) GormValue(ctx context.Context, db *gorm.DB) clause.Expr {
return clause.Expr{
SQL: "PointFromText(?)",
Vars: []interface{}{fmt.Sprintf("POINT(%f %f)", loc.X, loc.Y)},
}
}
此处提供了更多详细信息。此外,请注意,根据您使用的MySQL版本,这些函数的名称可能会有所不同。例如,MySQL 5.6PointFromText
函数对应于MySQL 8.0ST_PointFromText
函数。