将应用数据库从MySQL转SQLite时建表遇AUTO_INCREMENT语法错误的解决方法
解决SQLite中"AUTO_INCREMENT"语法错误的问题
错误原因
SQLite并不支持MySQL里的AUTO_INCREMENT关键字,它有自己的自增实现逻辑——要么用INTEGER PRIMARY KEY AUTOINCREMENT,要么更推荐直接使用INTEGER PRIMARY KEY(后者是SQLite原生的自增主键实现,性能更优)。另外,SQLite的类型体系、语法规则和MySQL存在差异,一些MySQL特有的配置项在SQLite里完全不需要。
正确的SQLite建表语句
把你的MySQL语句修改成下面这样就可以正常执行了:
CREATE TABLE Todo ( Id INTEGER PRIMARY KEY, Title TEXT DEFAULT NULL, Category TEXT DEFAULT NULL, State TEXT DEFAULT NULL );
关键修改点说明
- 自增主键:将
int(11) NOT NULL AUTO_INCREMENT改为INTEGER PRIMARY KEY。SQLite中,声明为INTEGER PRIMARY KEY的列会自动实现自增,当你插入数据时不给Id赋值,它会自动生成唯一的递增整数。如果一定要显式标注自增逻辑,也可以写成INTEGER PRIMARY KEY AUTOINCREMENT,但注意这里是没有下划线的AUTOINCREMENT,不过这种方式会有额外的性能开销,普通场景下用前者就足够了。 - 数据类型:把MySQL的
varchar(255)换成SQLite的TEXT。SQLite是动态类型,TEXT可以存储任意长度的字符串,不需要指定长度限制,完全能替代varchar的作用。 - 移除MySQL特有语法:删掉
ENGINE=MyISAM和DEFAULT CHARSET=utf8,因为SQLite没有存储引擎的概念,且从3.0版本开始默认就支持UTF-8编码,不需要额外声明。
测试插入示例
你可以用下面的语句验证自增功能,Id会自动生成:
INSERT INTO Todo (Title, Category, State) VALUES ('买菜', '日常', '未完成'); INSERT INTO Todo (Title, Category, State) VALUES ('写代码', '工作', '进行中');
内容的提问来源于stack exchange,提问作者Julian Medic
相关产品推荐
相关产品推荐

