SQLite3.7.11以上版本才支持一条INSERT语句插入多行数据
最近被SQLite坑了:一个在Ubuntu14.04的节点上运行正常的PHP程序迁移到CentOS 6.4的服务器之后就一直报SQL Syntax Error。出错的是一条批量插入数据的INSERT语句:
INSERT INTO table (col1, col2) VALUES
('row1col1', 'row1col2'),
('row2col1', 'row2col2');
报错信息也非常简单:
PHP Warning: SQLite3::exec(): near ",": syntax error in /tmp/test.php on line 32
这里不得不吐槽一下SQLite的报错信息,你这是在逗我呢吧,我语句里逗号那么多,谁知道你说的哪一个!!相比之下MySQL的报错就友善得多,会把出错的位置之后的SQL一起打出来,一眼就能定位到出错的地方。
言归正传,原来SQLite还真是够Lite的,在3.7.11版之前压根儿不支持一条语句多行插入1。Ubuntu14.04上自带的SQLite版本是3.8.2,而CentOS 6.4上自带的仅是3.6.20。而SQLite官网上的文档也是够Lite的2,虽然一个语法图无比清晰明了,但是却完全无法体现出版本兼容性的差异。不求你像MySQL一般为每个版本写一份文档,但也起码在每篇后面加几条Hint吧?
无奈人家就是要Lite,只好自己写Blog做笔记。