【问题标题】:MySQL - How to increase varchar size of an existing column in a database without breaking existing data?MySQL - 如何在不破坏现有数据的情况下增加数据库中现有列的 varchar 大小?
【发布时间】:2012-04-28 08:54:06
【问题描述】:

我有一个当前为varchar(100) 的列,我想将其设为10000

是不是就这么简单

alter table table_name set column col_name varchar (10000);

我害怕破坏现有数据。如果我运行这个查询我会好吗?还是我应该以另一种方式 alter 专栏?

谢谢!

【问题讨论】:

标签: mysql


【解决方案1】:

增加 varchar 列的大小是安全的。您不会损坏您的数据。

如果这有助于您安心,请记住,您可以在更改数据结构之前始终运行数据库备份

顺便说一句,正确的语法是:

ALTER TABLE table_name MODIFY col_name VARCHAR(10000)

此外,如果列之前允许/不允许空值,则应在更改表语句的末尾,列类型之后添加适当的语法。

【讨论】:

  • 使用show create table someTableName 确定列的附加功能,然后再进行更改!
  • 另外,请注意您的列的大小写,因为它会更改为您给它的任何大小写!我只是被那个有趣的功能咬了。
  • 为了安全的模式更改,我们使用 pt-online-schema-change 滚动 Percona。它使用所需更改制作表的副本,然后将副本重命名为原始表的名称。 Obv 你可以自己做,但它也有很多其他很好的安全检查。
  • 这不起作用:alter table my_table modify my_col varchar(100);这确实有效: alter table my_table change column my_col my_col varchar(100) not null; MySQL 5.6
  • @Paolo 来自 MySQL 文档:The effective maximum length of a VARCHAR is subject to the maximum row size (65,535 bytes, which is shared among all columns) and the character set used. 我猜你已经使用了很大一部分空间(65535-3072=62463 已使用),剩下的就是 3072。
【解决方案2】:

我通常使用这种说法:

ALTER TABLE `table_name`
  CHANGE COLUMN `col_name` `col_name` VARCHAR(10000);

但是,我认为 SET 也可以,从未尝试过。 :)

【讨论】:

  • 小心你的大小写,因为mysql很乐意为你改变列的大小写。
  • 在 postgres 中是 ALTER TABLE `tablename` ALTER COLUMN `columnname` TYPE VARCHAR(64); 我提到它是因为搜索没有提到 mysql 让我来到这里
【解决方案3】:

我想解释一下不同的 alter table 语法 - 请参阅 MySQL documentation

在列上添加/删除默认值:

ALTER TABLE table_name
ALTER COLUMN col_name {SET DEFAULT literal | DROP DEFAULT}

对于重命名列、更改其数据类型以及可选地更改列顺序:

ALTER TABLE table_name
CHANGE [COLUMN] old_col_name new_col_name column_definition
[FIRST|AFTER col_name]

用于更改列的数据类型和可选地更改列顺序:

ALTER TABLE table_name
MODIFY [COLUMN] col_name column_definition
[FIRST | AFTER col_name]

【讨论】:

  • +1 用于在不同情况下使用不同的命令(alterchangemodify)提供更多记录的响应。
【解决方案4】:

对我来说这是一个:

ALTER TABLE 表名修改字段名 VARCHAR(128) NOT NULL;

【讨论】:

    【解决方案5】:

    我正在使用 mysql,下面的语法对我来说效果很好,

    ALTER TABLE table_name MODIFY col_name VARCHAR(12);
    

    【讨论】:

      【解决方案6】:

      对我来说这很有效-

      ALTER TABLE 表名 ALTER COLUMN column_name VARCHAR(50)

      【讨论】:

        【解决方案7】:

        使用以下语法: alter table table_name modify column col_name varchar(10000);

        【讨论】:

        • 这是该问题的最受好评的 5 年前答案中给出的解决方案的精确副本,没有格式和解释。
        猜你喜欢
        • 2013-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-01
        • 1970-01-01
        • 2018-05-21
        • 1970-01-01
        • 2020-08-30
        相关资源
        最近更新 更多