Closed jeffrey-lunaon closed 3 years ago
示例里边的 SQL 在 Server version: 5.6.51 MySQL Community Server (GPL) 下会创建失败,会触发索引过长的错误 ,过长也会导致索引页存放的条目数降低,导致索引存储和查询的效率不高。
粗略根据字节数算了下,把 shorten
改成 150 后 MySQL 5.6 默认配置运行下执行成功,望文档内修复提示下,给后来人提个醒。
错误信息如下: [2021-05-30 14:07:12] [42000][1071] Specified key was too long; max key length is 767 bytes
而且自定义主键别名的时候无法编译成功
PRIMARY KEY pk_id(
id)
针对大家提的这个问题,我们正在考虑修复方案,目前使用的是一个sqlparser库,对解析支持还是比较弱,我们尽快商讨方案去解决这个语法解析不准确问题。目前如果大家在使用过程中遇到解析问题,建议通过datasource
途径生成,感谢大家对goctl的支持!
无法根据单列索引生成缓存代码
goctl model mysql datasource -url="root:greyireland@tcp(localhost:3306)/gozero" -table="user" -c -dir .
CREATE TABLE `user` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`age` int NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_age` (`age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
UserModel interface {
Insert(data User) (sql.Result, error)
FindOne(id int64) (*User, error)
Update(data User) error
Delete(id int64) error
}
goctl版本 goctl -version goctl version 1.1.6 darwin/amd64
无法根据单列索引生成缓存代码
goctl model mysql datasource -url="root:greyireland@tcp(localhost:3306)/gozero" -table="user" -c -dir . CREATE TABLE `user` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `age` int NOT NULL, PRIMARY KEY (`id`), KEY `idx_age` (`age`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; UserModel interface { Insert(data User) (sql.Result, error) FindOne(id int64) (*User, error) Update(data User) error Delete(id int64) error }
goctl版本 goctl -version goctl version 1.1.6 darwin/amd64
普通索引生成代码不会有缓存,只有唯一索引才会带索引缓存哈,主键会有缓存在里面的,你可以看一下model生成的相关文档说明
sqlparser 这个库已经几年没更新了,对很多语法不支持。还是用datasource吧
@NeesonD 目前已经在开发针对ddl
的解析器了,可以关注一下zeromicro/ddl-parser进度
根据教程 定义数据库表结构,并生成 CRUD+cache 代码,创建了 sql 文件,个人盲改了下,导致 SQL 有一些错误,但报错信息并不明确,靠猜想是我 SQL 语句出了问题,修改正确后指令正确执行正常结束。
多加了 ,,或者加索引的语法不正确等都会触发不同的错误, syntax error at position xxx ,且没什么规律
执行过程截图如下: