尝试用xorm根据结构体建sqlite表,字段类型与长度与结构定义不符合

pika623 · · 1494 次点击
经过3楼大佬的提醒,对比xorm和gorm建表的语句确实不一样。 xorm ![image.png](https://static.golangjob.cn/221123/ccb5edfe6b0c647b857b7eaee0244dfd.png) gorm ![image.png](https://static.golangjob.cn/221123/caf4844b1b001197c0a62fad3c01c059.png) 但是按照xorm官方文档中的属性定义介绍,定义的结构体也是没有问题的。 直到看到了官方文档(http://xorm.topgoer.com/chapter-02/4.columns.html)中属性定义中的最后一个表格: ![image.png](https://static.golangjob.cn/221123/f28b42bb8a64c562b1a4c456da01f8b7.png) 猜测可能是xorm严格按照sqlite支持的字段类型将VARCHAR转换成了TEXT,所以建表语句中的类型就变为了TEXT。 仔细查看xorm源代码发现:当数据库为sqlite时根据结构体建表,构造sql语句时会调用SQLType()函数 ,此函数将VARCHAR转换成了TEXT。 ![image.png](https://static.golangjob.cn/221123/2fa3156869beeaae5128e19f4a293684.png)
#5
更多评论
jan-bar
想要拥有,必定付出。
看看sqlite支持的类型吧,https://www.runoob.com/sqlite/sqlite-data-types.html 没有varchar吧,都是text代替。
#1
可是如果使用gorm的话是可以的 结构体示例: ```go type CsTable struct { Id int64 `gorm:"primarykey"` Name string `gorm:"type:varchar(40);not null;unique"` Type string `gorm:"type:varchar(40)"` Remark string `gorm:"type:varchar(1024)"` } ``` 根据此结构体建表代码 ```go engine.AutoMigrate(&model.CsTable{}) ``` 运行后用Navicat查看新建的表 ![image.png](https://static.golangjob.cn/221122/bfe79cbe846c6c998ae06fa9327cac49.png) **em这就没有被text代替**
#2