MySQLではOFFSETのみ指定はできない
本来LIMIT xまたはLIMIT y,xという書き方しかなく、
LIMIT x OFFSET yは互換性のために用意された構文なので
OFFSETだけを指定することはできない。
https://dev.mysql.com/doc/refman/5.6/ja/select.html
LIMIT 句を使用すると、SELECT ステートメントによって返される行数を制約できます。LIMIT は 1 つまたは 2 つの数値引数を受け取ります。これは、どちらも負ではない整定数である必要があります。ただし、次の例外があります。
つまり、LIMIT row_count は LIMIT 0, row_count と同等です。
PostgreSQL との互換性のために、MySQL は LIMIT row_count OFFSET offset 構文もサポートしています。
#MySQL
GORMではこのように
0以上のparsedLimitが得られなければそもそもoffsetの処理をしないようになっている。
https://github.com/jinzhu/gorm/blob/v1.9.1/dialect_mysql.go#L142
code:golang
if parsedLimit, err := strconv.ParseInt(fmt.Sprint(limit), 0, 0); err == nil && parsedLimit >= 0 {
sql += fmt.Sprintf(" LIMIT %d", parsedLimit)
if offset != nil {
if parsedOffset, err := strconv.ParseInt(fmt.Sprint(offset), 0, 0); err == nil && parsedOffset >= 0 {
sql += fmt.Sprintf(" OFFSET %d", parsedOffset)
}
}
}
MySQLの仕様を知らずGORMを介してしか使ってないと、Offset(a)を単体で指定して
実行されたSQLにOFFSET句が存在しておらず、困惑することになった。
#GORM