在将 gorm 与具有整数属性的自定义类型一起使用时,我遇到了麻烦。Gorm倾向于为我将整数值转换为字符串。有两个不同的问题:
问题 1:
我有一个自定义类型,定义如下:
type ClientType uint8
const (
USER ClientType = iota
SERVER
)
func (t ClientType) String() string {
return [...]string{"User", "Service"}[t]
然后我有一个ORM结构,定义如下:Client
type Client struct {
ClientID uint64 `gorm:"primaryKey"`
UserID uint64
ClientType ClientType
CreatedAt time.Time
}
调用时,gorm 会自动调用 on 上的方法,并导致 MySQL 中的数据类型不匹配,我打算将其存储在名为 .db.Create(&client)String()ClientTypeClientTypeTINYINTclient_type
问题 2:
所以我想,如果我不知道如何重写方法的自动调用,我只需将方法重命名为并在需要时调用它。现在 gorm 不能再调用它了,而是将整数值转换为数字字符串。因此,现在,哪个是,将变成生成的SQL语句,并且将成为,尽管MySQL能够将字符串转换回整数。String()ToString()USER0'0'SERVER'1'
我仍然想知道我做错了什么,让gorm认为我想要这些转换。
有没有办法覆盖 的调用,所以我仍然可以按照惯例命名该方法?String()
是不是使用 that made gorm 将 int 转换为字符串,因为使用 uint64 的其他数值(ClientID 和 UserID)不受此问题的影响?是某种数据库模式的缓存使gorm记住了旧的模式,其中client_type曾经是一列?uint8
ENUM('User', 'Service')
哔哔one
相关分类