为什么我的DBD :: SQLite会出现语法错误,即使我的SQLite版本支持`CREATE TABLE IF NOT EXISTS`?

eas*_*arm 0 sqlite perl

我使用SQLite v3编写Perl脚本.sqlite版本是3.3.6.

当我在命令行上运行sqlite时,它可以工作.但是当我在Perl中做同样的事情时,它会引发这个错误

DBD :: SQLite :: db失败:接近"NOT":文件行2675处dbdimp.c第268行的语法错误(1).

这就是我在控制台上所做的事情:

$ sqlite3 test.db
SQLite version 3.3.6
sqlite> create table if not exists  DATA_STATUS_VALUE (TYPE TEXT PRIMARY KEY, Seq INTEGER);
sqlite> .tables AllJobs            LOCKSTAT_VALUE     test_run12_data
DATA_STATUS_VALUE  STATUS_VALUE       test_run12_lock
Run Code Online (Sandbox Code Playgroud)

我正在使用的SQLite版本支持IF NOT EXISTS,为什么我会收到错误?

这是我的Perl代码:

#!/usr/bin/perl

use DBI;
my $driver = "SQLite";

$database = "test.db";
$dsn      = "DBI:$driver:dbname=$database";
$dbh      = DBI->connect( $dsn, undef, undef, { RaiseError => 1 } );

$dbh->do("CREATE TABLE IF NOT EXISTS DATA_STATUS_VALUE (TYPE TEXT PRIMARY KEY, Seq INTEGER);");
Run Code Online (Sandbox Code Playgroud)

Thi*_*Not 7

我正在使用的SQLite版本支持IF NOT EXISTS,为什么我收到错误?

因为DBD :: SQLite没有使用您已安装的SQLite版本.DBD :: SQLite捆绑了自己的SQLite版本 ; 它将使用捆绑版本,除非您在编译时告诉它使用其他版本.

您可以通过运行找到DBD :: SQLite正在使用的SQLite版本:

perl -MDBD::SQLite -le'print $DBD::SQLite::sqlite_version'
Run Code Online (Sandbox Code Playgroud)

支持CREATE TABLE ... IF NOT EXISTS加在3.3.0对于SQLite.您应该升级DBD :: SQLite,因为最新版本(1.50)与SQLite 3.10.2捆绑在一起.