我有一个带有“int”列的表。在软件升级期间,我想将其更改为“长”数据类型。似乎 SQLite 没有提供更改/修改列属性的选项(在 alter 语句中)。由于我想进行升级,该表可能包含用户不应丢失的数据。所以请给我建议一个在不丢失数据的情况下更改列数据类型属性的好方法。
搜索链接中建议的一种方法是创建一个临时表,从现有表中复制记录,删除现有表,然后重命名临时表。我怀疑这是否有效。
感谢您的帮助!
问候
维维克·拉古纳坦
我使用以下语句来更改列的类型。
CREATE TABLE IF NOT EXISTS **TEMP_TABLE** (id integer primary key autoincrement, **col2change integer not null**, ...)
INSERT INTO TEMP_TABLE SELECT * FROM EXISTING_TABLE
DROP TABLE EXISTING_TABLE
ALTER TABLE TEMP_TABLE RENAME TO EXISTING_TABLE
我将现有表中的 int 类型列更改为整数类型。对于几百行,它相当快。
SQLite3 列没有数据类型,只有关联——将列类型从 int 更改为 long 没有任何好处。
如果包装程序在将值提供给 SQLite3 之前将其截断,则可以通过编辑模式来解决此问题。这是一项危险的操作,因此请仅在备份数据库后进行。模式存储在表中sqlite_master
;通常它是只读的,但如果您使用writable_schema pragma 启用它,您可以修改它。请注意只进行不会使您的数据无效的更改;您可能会更改int
为,long int
因为它们都具有 INTEGER 亲和力。
您可以添加一个新列,将旧列的值复制到新列,删除旧列,然后将新列重命名为旧名称
AFAIK一旦创建和使用表,Android 就无法更改列数据类型。实践的方法是创建一个新表并复制您阅读的数据