【问题标题】:Changing data type of a column without corrupting the data in the table [duplicate]在不破坏表中数据的情况下更改列的数据类型[重复]
【发布时间】:2016-05-23 10:25:57
【问题描述】:

我有员工表,如下所述:

+-------------+-----------------------+------+-----+---------+----------------+
| Field       | Type                  | Null | Key | Default | Extra          |
+-------------+-----------------------+------+-----+---------+----------------+
| employee_id | int(16) unsigned      | NO   | PRI | NULL    | auto_increment |
| first_name  | varchar(20)           | NO   |     | NULL    |                |
| last_name   | varchar(20)           | NO   |     | NULL    |                |
| team        | varchar(20)           | NO   |     | No Team |                |
+-------------+-----------------------+------+-----+---------+----------------+

我想将团队的类型从 varchar(20) 更改为 varchar(128) 而不会损坏表中的数据。

我应该怎么做?

【问题讨论】:

  • 它不会被破坏,因为新长度大于旧长度。此外,它们具有相同的类型。在另一种情况下,如果旧长度大于新长度,则数据不是corrupted,而是被截断。

标签: mysql sql


【解决方案1】:

在这种情况下,您可以:

  • 创建数据库备份以确保如果出现问题,您仍然可以使用最近的副本
  • 将数据保存到临时创建的表或列中
  • 进行更改并更改列
  • 检查临时保存和您的数据之间是否有任何差异并应对潜在差异
  • 如果一切都处理得很好,请删除临时表/列,如果没有,请重新加载备份并重新从头开始操作

在这种特殊情况下应该没有问题,因此您可以决定是否应该以预防为主。

【讨论】:

    【解决方案2】:
    ALTER TABLE `employee` CHANGE team team VARCHAR(128) NOT NULL DEFAULT 'No Team';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 2016-12-03
      • 2023-04-09
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多