Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MySQL: How to alter varchar(255) UNIQUE column to UNIQUE Text NOT NULL?

The current column is a VARCHAR(255) NOT NULL, so how do I change it to TEXT NOT NULL?

NOTE: The column intended to be changed its property type is a UNIQUE KEY combination of another column. E.g.

UNIQUE KEY (Name, Description)

The column description is currently in varchar(255). It can't be changed because of this:

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

I need it to be TEXT, else I need to recreate the whole thing?? I got some tedious and important data already in it. It's going to be troublesome to recreate.

like image 440
George Leow Avatar asked Jan 20 '11 07:01

George Leow


1 Answers

Are you going to use TEXT column as part of UNIQUE KEY? It's VERY inefficient! Don't do that! I'm strongly suggest you to:

  • Add additional column named for example 'description_hash' char(32) not null default ''
  • Store the hash-value for description field into it. For ex. description_hash=MD5(description)
  • Change your key to UNIQUE KEY (name, description_hash)

Ofcourse you'll need to keep the description_hash column up-to-date in your code, but as see - in most cases it is require just few code changes. Or you can use trigger for handling this.

like image 144
Vadim Avatar answered Sep 25 '22 19:09

Vadim