バージョン、インストールされた日付、ソフトウェアのホームページURLなど、ローカルにインストールされたソフトウェアパッケージの名前を含むテーブルを持つSqlite3(v3.8.7.1 2014-10-29)データベースがあります。Sqliteは、値が列名と同じである文字列等価で選択しますか?
パッケージの1つ(CPANモジュール "バージョン")がテーブルの列の1つ、すなわち「バージョン」と同じ名前を持つという問題が発生しました。表「パッケージ」のための最も簡単なテストケースで
name | version
----------+-----------
delete | 2.2.5
replace | 1.2.5
search | 3.1
version | 0.2.3
echo 'SELECT * FROM Packages where name = "replace" ;' | sqlite3 Test.db
replace|1.2.5
echo 'SELECT * FROM Packages WHERE name = "search" ;' | sqlite3 Test.db
search|3.1
しかし
echo 'SELECT * FROM Packages WHERE name = "version" ;' | sqlite3 Test.db
「バージョン」という名前のパッケージのエントリを取得しようとしたときに何があるため、おそらくそれ返されません名前を「バージョン」列の値と比較しようとしています。
リテラル文字列の比較を強制する方法はありますか、そのような問題を回避する唯一の方法は、 "version"から "package_version"などの名前に列の名前を変更することです。パッケージ名文字列?