如何在 MySQL 中将 mediumtext 列更改为 varchar? (换表)

Posted

技术标签:

【中文标题】如何在 MySQL 中将 mediumtext 列更改为 varchar? (换表)【英文标题】:How to change mediumtext column to varchar in MySQL? (table altering) 【发布时间】:2021-11-13 03:50:18 【问题描述】:

我想将表格的列格式从 mediumtext 转换为 varchar,因为我想将其定义为唯一值列。 如果我尝试这样做,我会从管理员和 phpmyadmin 那里得到一个积极的反馈,但它会显示注释/警告“Note 1246 Converting column 'URL' from VARCHAR to TEXT”并且没有任何反应。

列的当前值遵守 VARCHAR 的长度限制。是否有可能强制进行这种更改?

【问题讨论】:

正如注释所说的“从 VARCHAR 到 TEXT”,似乎 adminer/phpmyadmin 试图以错误的方式更改列类型。您能否提供更多关于您如何与 adminer/phpmyadmin 交互的信息? 如果要使用VARCHAR,则需要指定最大长度。 @user14967413 我通过 UI 以及以下方法进行了尝试:ALTER TABLE tablename MODIFY COLUMN URL varchar(65535); 运行SELECT MAX(LENGTH(url)) FROM tbl;你会得到什么? @RickJames 158 【参考方案1】:

整个索引的限制是 3072 字节。你确定它们会比这更短吗?如果没有,有一些笨拙的方法可以通过包含md5(或其他一些摘要)的额外列来实现。

错误消息可能与VARCHAR 相关,而不是UNIQUE。请注意,CHARACTER SET 会影响限制。

SELECT MAX(LENGTH(url)) FROM tbl;给你的只有158。建议你把栏改成VARCHAR(191)

【讨论】:

以上是关于如何在 MySQL 中将 mediumtext 列更改为 varchar? (换表)的主要内容,如果未能解决你的问题,请参考以下文章

TINYINT,SMALLINT,MEDIUMINT,INT,INTEGER,BIGINT;text,longtext,mediumtext,ENUM,SET等字段类型区别

带有长文本的 Rails 3 迁移

如何在mysql中将列拆分为多个列

如何在mysql或phpmyadmin中将列的值增加1?

如何在ClickHouse中将具有相同列值的mysql行分组为一行?

mysql中的text长度到底是多少