安装MySQL驱动程序后,Perl SQLite驱动程序停止工作

时间:2014-08-14 21:37:27

标签: mysql perl sqlite

我总是使用DBIDBD::SQLite成功地将Perl与SQLite一起使用。

最近我在我的Ubuntu系统上安装了一个MySQL客户端和服务器,以及DBD::mysql。 MySQL工作正常,但在安装Perl模块后,我在SQLite上运行了一个不同的项目,我得到的消息是没有DBD::SQLite

我使用CPAN重新安装了DBD::SQLite,现在我创建的数据库似乎不再是有效文件。如果我创建一个像这样的非常简单的数据库

my $dbh = DBI->connect("dbi:SQLite:dbname=test.db","","") or die $DBI::errstr;
my $sth = $dbh->prepare("CREATE TABLE test (id INTEGER, name char(100), PRIMARY KEY (id))");

$sth->execute(); 
$sth->finish;
$dbh->disconnect();

然后尝试使用 SQLiteStudio 打开此文件我收到消息

Error while opening test.db: file is encrypted or is not a database

在Linux控制台中显示以下消息

file is encrypted or is not a database
    while executing
"sqlite2 $name $_path"
    (object "::sqlite20" method "::Sqlite2::createDbObject" body line 2)
invoked from within
    "createDbObject ::database$dbNum"

显然安装了DBD::mysqlDBD:SQLite混淆。

有没有人对于为什么会发生这种情况以及如何解决这个问题有任何想法?

1 个答案:

答案 0 :(得分:1)

自2004年版本1.00以来,DBD :: SQLite附带SQLite 3,因此创建和操作SQLite 3数据库。您正在使用创建和操作SQLite 2数据库的工具。它们不兼容。

  

SQLite数据库文件使用的格式已经完全修改。旧版本2.1格式和新3.0格式彼此不兼容。 SQLite 2.8版本不会读取3.0版本的数据库文件,而SQLite 3.0版本也不会读取2.8版本的数据库文件。

引用SQLite documentation,当SQLite 3出现时。

将DBD :: SQLite降级为早于1.00的版本或使用sqlite3代替sqlite2