前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Go系列:gorm踩坑记录

Go系列:gorm踩坑记录

原创
作者头像
用户9805946
发布2024-11-18 21:33:01
发布2024-11-18 21:33:01
1440
举报
文章被收录于专栏:Go

这段时间的工作主要是业务的后端存储从tikv迁移到mysql,在切换过程中也遇到一些坑, 特此记录。

从docker进去mysql容器后,无法输入中文

docker拉起mysql容器。然后通过如下命令进去容器

代码语言:bash
复制
docker exec -it mysql bash

再执行mysql进入数据库后,无法输入中文,同时在这个窗口执行sql语句都无法正常显示中文。

经过一番搜索,发现是docker exec后的字符终端需要设置成UTF-8

可以通过如下命令进入mysql容器

代码语言:bash
复制
docker exec -it mysql-tianchi env LANG=C.UTF-8 bash

或者等候后执行

代码语言:bash
复制
export LANG=C.UTF-8

然后在bash和mysql终端中都可以正常输入中文啦

Gorm自定义字段查询无内容

代码语言:go
复制
type User struct {
	ID   string `gorm:"id" json:"id"`
	Name string `gorm:"name" json:"name"`
	Location Location `gorm:location" json:"location""`
}

func (User) TableName() string {
	return "users"
}

type Location struct {
	Province string `json:"province"`
	City     string `json:"city"`
}

func (l *Location) Scan(src interface{}) error {
	bs, ok := src.([]byte)
	if !ok {
		return fmt.Errorf("src is not []byte")
	}
	if !json.Valid(bs) {
		return fmt.Errorf("invalid json")
	}
	return json.Unmarshal(bs, l)
}

func (l Location) Value() (driver.Value, error) {
	return json.Marshal(l)	
}

这个很容易踩坑的地方就是这个自定义类型的Scan和Value方法

注意了: Scan是指针方法,Value是值方法

⚠️ 千万不要自作聪明的把他们都改成值方法或者指针方法

这个sql语句为什么报错

在一个业务表中,有个字段为order字段,执行创建表的时候一直报错

代码语言:sql
复制
mysql> CREATE TABLE users (
    ->   id varchar(255) NOT NULL,
    ->   name varchar(255) DEFAULT NULL,
    ->   order varchar(255) DEFAULT NULL
    -> );
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order varchar(255) DEFAULT NULL
)' at line 4

百思不得其解,这个语句也太简单了,实在想不到哪里会出错

后来在通义千问里问里下,原来order是mysql的保留字,在这里直接使用,mysql认为是order关键字,不是order字段名。

解决办法也比较简答,用反引号扩起来。

所以后续在写sql语句时,将字段、表名用反引号括起来是一个比较好的习惯

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 从docker进去mysql容器后,无法输入中文
  • Gorm自定义字段查询无内容
  • 这个sql语句为什么报错
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档