Короче говоря, решение может быть: -
- Ничего не делать (т.е. использовать гибкость SQLite)
- Вы можете использовать CAST, например.
CAST(mycolumn AS TEXT)
(используется ниже)
- Создать новую таблицу для замены старой таблицы .
Разъяснения.
В SQLite есть ограничения на то, что можно изменить. Короче говоря, вы не можете изменить столбец. Alter позволяет только переименовать таблицу или добавить столбец. Согласно: -
![enter image description here](https://i.stack.imgur.com/jpYWA.gif)
SQL как понял SQLite - ALTER TABLE
Однако, за исключением столбца, который является псевдонимом rowid column
- один, определенный с
?? INTEGER PRIMARY KEY
или ?? INTEGER PRIMARY KEY AUTOINCREMENT
или ?? INTEGER ... PRIMARY KEY(??)
(где ?? представляет действительное имя столбца)
Вы можете хранить любой тип значения в любом типе столбца. например рассмотрим следующее (в котором хранятся INTEGER, REAL, TEXT, дата, заканчивающаяся в TEXT и BLOB): -
CREATE TABLE IF NOT EXISTS example1_table (col1 BLOB);
INSERT INTO example1_table VALUES (1),(5.678),('fred'),(date('now')),(x'ffeeddccbbaa998877665544332211');
SELECT *, typeof(col1) FROM example1_table;
Результат: -
![enter image description here](https://i.stack.imgur.com/IugJZ.jpg)
Как так, нужно ли вообще менять тип столбца?
Если вышеприведенного недостаточно, тогда вы можете создать новую таблицу с новыми определениями столбцов, заполнить ее, если необходимо, из исходной таблицы, а затем заменить исходную таблицу новой таблицей ( a) удалить оригинал и б) переименовать новый или а) переименовать оригинал, б) переименовать новый и в) удалить оригинал )
например. : -
DROP TABLE IF EXISTS original;
CREATE TABLE IF NOT EXISTS original (mycolumn INTEGER);
INSERT INTO original VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(0);
-- The original table now exists and is populated
CREATE TABLE IF NOT EXISTS newtable (mycolumn TEXT);
INSERT INTO newtable SELECT CAST(mycolumn AS TEXT) FROM original;
ALTER TABLE original RENAME TO old_original;
ALTER TABLE newtable RENAME TO original;
DROP TABLE IF EXISTS old_original;
SELECT *,typeof(mycolumn) FROM original;
Результат: -
![enter image description here](https://i.stack.imgur.com/nL53P.jpg)