M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2010年7月15日 22:11

SQLiteでカラムの型間違ったので直す

このエントリーをはてなブックマークに追加 mixiチェック

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; しとくとよい。もっと良いやり方あると思うけど、汎用性もあると思うのでメモ。

投稿 大野 義貴 [パソコン・インターネット] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3283

コメントする