如何更改 CCK 字段类型
由 lugir 于 星期日, 11/13/2011 - 17:20 发布
如果在创建 CCK 字段之前没有很好的考虑字段的类型,那么在项目后期很可能就需要对字段进行修改。对于刚刚创建的 CCK 字段,如果字段的类型选择错了,最简单的办法就是把字段删除,然后添加一个类型正确的字段。这倒不会有什么伤害。
不过并不是所有情况都是这么简单,有时候网站运行了很长时间之后才发现之前定义的字段类型已不能满足需要了。例如一开始创建的是 float 类型的字段,但因为数据的增长,发现需要将内容类型转换成 decimal。在这种情况下,如果删除 float 字段,所有存储在 float 字段里的数据也都一同被删除了。所以,要最大限度地保证原有数据不丢失,应该如何更改 CCK 字段的类型。
更改 CCK 字段类型的方法
注意:执行以下操作前,请先备份数据库
- 为内容类型新增加一个类型正确的字段,名为 field_<tmp>(这只是一个临时的字段,名称并不是很重要),并按照正确的配置对字段进行配置;
- 执行 SQL 语句将 field_<origin> 字段中的所有数据复制到 field_<tmp> 字段中;
UPDATE content_type_<your content type> SET field_<new fieldname>_value = field_<old fieldname>_value
注意:请在执行以上语句时,使用对应的内容类型名称和字段名称代替其中尖括号(<>)中的名称 - 删除原来的 CCK 字段 field_<origin>;
- 再建立一个类型正确的字段,使用删除的 CCK 字段的名称 field_<origin>,并按照正确的配置对字段进行配置;
- 执行类似第2步中的 SQL 语句,不过这些一次要将数据从 field_<tmp> 复制到 field_<origin> 中
- 删除临时字段 field_<tmp>;
- 完成。
按照以上步骤更改 CCK 字段的类型虽然有点麻烦,但最重要的是能够保全数据。因为数据类似不一样,可能会导致一些数据丢失精度,但小面积的损失远远好过于丢失全部数据 :D
参考文档:http://drupal.org/node/769784