MySQL:如何将 varchar(255) UNIQUE 列更改为 UNIQUE Text NOT NULL?

标签 mysql sql mysql-error-1170

当前列是 VARCHAR(255) NOT NULL,那么如何将其更改为 TEXT NOT NULL?

注意:要更改其属性类型的列是另一列的 UNIQUE KEY 组合。例如

唯一键(名称、描述)

列描述当前在 varchar(255) 中。因此无法更改:

ERROR 1170 (42000): BLOB/TEXT column 'description' used in key specification without a key length

我需要它是文本,否则我需要重新创建整个东西??我已经在其中获得了一些繁琐而重要的数据。重新创建会很麻烦。

最佳答案

您打算将 TEXT 列用作 UNIQUE KEY 的一部分吗? 这是非常低效的!不要那样做! 我强烈建议您:

  • 添加额外的列,例如 'description_hash' char(32) not null default ''
  • description 字段的哈希值存储到其中。对于前。 description_hash=MD5(描述)
  • 将您的 key 更改为 UNIQUE KEY (name, description_hash)

当然,您需要使代码中的 description_hash 列保持最新,但如您所见 - 在大多数情况下,只需更改少量代码即可。 或者您可以使用触发器来处理它。

关于MySQL:如何将 varchar(255) UNIQUE 列更改为 UNIQUE Text NOT NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4744617/

相关文章:

mysql - mysql表中使用TEXT字段的问题

MySql Access VB

php - MySQL 数据库接受远程连接,但不接受来自 PHP 的连接

php - 为什么我的表单没有发布到数据透视表?

sql - oracle中PL/SQL中文乱码

mysql - 无法使用sequelize运行连接查询

mysql - 无法在 MySQL 数据库中创建数据类型为 TEXT 的列

php - 如何在 Laravel 5 中使用 orchestral/tenanti 构建具有多个数据库的 Multi-Tenancy 应用程序?

mysql - 配置单元 : why is metastore_db created in my project folder?