SQLiteでTEXT型にしとく必要があったのにINTEGER型で宣言しちゃった。んで直すと。
なんで直さなくちゃいけないかっていうと、INTEGER型だと、頭に0がつく文字列を入力すると自動的に0が取れてしまうから。いくらSQLiteが型に無頓着だっていっても、それぐらいの仕事はするよね。
コマンドラインで。
$ sqlite3 customers.db
既存のテーブルを確認。
sqlite> .schema
CREATE TABLE customers(
id INTEGER PRIMARY KEY AUTOINCREMENT,
company TEXT,
customer_id INTEGER,
comment TEXT,
ctime DEFAULT CURRENT_TIMESTAMP,
atime DEFAULT CURRENT_TIMESTAMP
);
この例でいうと、customer_idをINTEGER型からTEXT型にしたい。
というわけで、さっき.schemaで表示されたテーブル生成文をコピーして、必要な部分の属性を変えて以下のように。
BEGIN TRANSACTION;
CREATE TABLE customers_temp(
id INTEGER PRIMARY KEY AUTOINCREMENT,
company TEXT,
customer_id TEXT,
comment TEXT,
ctime DEFAULT CURRENT_TIMESTAMP,
atime DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO customers_temp SELECT * FROM customers;
DROP TABLE customers;
CREATE TABLE customers(
id INTEGER PRIMARY KEY AUTOINCREMENT,
company TEXT,
customer_id TEXT,
comment TEXT,
ctime DEFAULT CURRENT_TIMESTAMP,
atime DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO customers SELECT * FROM customers_temp;
DROP TABLE customers_temp;
COMMIT;
なんてした。
終わった後、VACUUM; しとくとよい。もっと良いやり方あると思うけど、汎用性もあると思うのでメモ。