PerlのDBIおよびSQLiteデータベースを使用しています(DBD :: SQLiteがインストールされています)。私は次のコードを持っています:
my $dbh = DBI->connect("dbi:SQLite:dbname=$db", "", "", { RaiseError => 1, AutoCommit => 1 });
...
my $q = "INSERT OR IGNORE INTO books (identica, book_title) VALUES (?, ?)";
my $sth = $dbh->prepare($q);
$sth->execute($book_info->{identica}, $book_info->{book_title});
私が抱えている問題は$book_info->{identica}
、0で始まる場合、それらが削除され、データベースに数値が挿入されることです。
たとえば、identica
of00123
はに変換され123
ます。
SQLiteには型がないことを知っていますが、DBIにidentica
数値ではなく文字列として挿入させるにはどうすればよいですか?
"$book_info->{identica}"
渡すときのように引用してみまし$sth->execute
たが、うまくいきませんでした。
編集
クエリに直接値を挿入しても機能しません。
my $i = $book_info->{identica};
my $q = "INSERT OR IGNORE INTO books (identica, book_title) VALUES ('$i', ?)";
my $sth = $dbh->prepare($q);
$sth->execute($book_info->{book_title});
00123
これはまだ、、123
そして...0000000009
9
編集
なんてこった、私はコマンドラインでこれをしました、そして私はこれを手に入れました:
sqlite> INSERT INTO books (identica, book_title) VALUES ('0439023521', 'a');
sqlite> select * from books where id=28;
28|439023521|a|
SQLiteによって削除されました!
スキーマは次のようになります。
CREATE TABLE books (
id INTEGER PRIMARY KEY AUTOINCREMENT,
identica STRING NOT NULL,
);
CREATE UNIQUE INDEX IDX_identica on books(identica);
CREATE INDEX IDX_book_title on books(book_title);
何が起こっているのかアイデアはありますか?
解決
これはsqliteの問題です。ジムのコメントの回答を参照してください。はsqliteでSTRING
ある必要があります。TEXT
それ以外の場合は、数値として扱います。
スキーマを次のように変更すると、問題が解決しました。
CREATE TABLE books (
id INTEGER PRIMARY KEY AUTOINCREMENT,
identica TEXT NOT NULL,
);