这个区别不容忽视, 是个不显眼的坑.
mysql and oracle 分页开始下标不同,造成的问题
mysql 第一页从0开始
oracle是第一页从1开始算
要是使用时,刚好调过来,就会出现问题.
// mysql 第一页从0开始, 虽然还是返回5条,但会跳过第0条记录. oracle正确
List<Orders> list = suidRich.select(new Orders(), (page - 1) * rows+1, rows);
// oracle 第1页会少一个记录(一页5条,但首页却只有4条). 因oracle是从1开始算开始记录的. mysql正常
List<Orders> list = suidRich.select(new Orders(), (page - 1) * rows, rows);
package org.teasoft.exam.bee.osql;
import java.util.List;
import org.teasoft.bee.osql.SuidRich;
import org.teasoft.exam.bee.osql.entity.Orders;
import org.teasoft.exam.comm.Printer;
import org.teasoft.honey.osql.core.BeeFactoryHelper;
/**
* @author Kingstar
* @since 1.9
*/
public class NotPageBug {
private static SuidRich suidRich = BeeFactoryHelper.getSuidRich();
public static void main(String[] args) {
int rows = 5;
for (int i = 1; i <= 4; i++) {
int page=i;
// mysql 第一页从0开始, 虽然还是返回5条,但会跳过第0条记录. oracle正确
// List<Orders> list = suidRich.select(new Orders(), (page - 1) * rows+1, rows);
// oracle 第1页会少一个记录(一页5条,但首页却只有4条). 因oracle是从1开始算开始记录的. mysql正常
List<Orders> list = suidRich.select(new Orders(), (page - 1) * rows, rows);
Printer.printList(list);
}
}
}

本文探讨了MySQL与Oracle数据库在分页查询时的不同之处,重点在于它们起始索引的差异。MySQL从0开始,而Oracle从1开始。这可能导致在编写跨数据库的代码时出现潜在问题,如果不注意,可能会导致数据丢失或不一致。示例代码展示了这种差异如何影响查询结果,提醒开发者在进行数据库操作时需留意此类细节。
2168

被折叠的 条评论
为什么被折叠?



