残念ながら、SQLite
は列のデータ型を変更するDDL
をまだサポートしていないようですね。
私はバージョン3.36
を使っていますけど、modify column
は悉く失敗します。
したがって、変更手順としてはTEXT
型のbook_pic_ad
列を定義した新しいテーブルを作り
オリジナルから新テーブルにデータをコピーした後、オリジナルは何らかの名前にリネーム、
新しく作ったテーブルはオリジナルの名前(book
)にリネームという形になりそうです。
・SQLite 3 カラムの型を変更する
・本家 ALTER TABLE
・ALTER TABLE Statement
本家の手順をそのまま踏襲した場合、
con2319さんご提示の例ですと、要約したDDL
は以下のようになるのでしょう。
SQL
1-- 1. TEXT型で再定義した列を含んだ一時テーブルを作成
2CREATE TABLE IF NOT EXISTS temp ( ..., book_pic_ad TEXT, ... );
3-- 2. 一時テーブルへデータをコピー
4INSERT INTO temp SELECT ..., cast(book_pic_ad AS TEXT), ... FROM book;
5-- 3. オリジナルのテーブルを適当な名前にリネーム
6ALTER TABLE book RENAME TO book_old;
7-- 4. 一時テーブルの名前をオリジナルのテーブル名に変更
8ALTER TABLE temp RENAME TO book;
9-- 5. ( DBのバックアップがある場合は )以前に利用していたテーブルを削除
10DROP TABLE IF EXISTS book_old;
11-- 6. 念のためテキスト型に変更した列のデータ型を確認
12SELECT book_pic, typeof(book_pic) chk FROM book;
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/01 12:43
2021/09/01 12:56
2021/09/01 13:07
2021/09/01 13:08
2021/09/01 13:12
2021/09/01 13:18
2021/09/01 17:32 編集