Migrating data from a boolean column to a varchar column
In MySQL, the BOOLEAN data type does not really exist. If you create something like this:

mysql&gt; CREATE TABLE imp (id int PRIMARY KEY auto_increment, important BOOLEAN);
Query OK, 0 rows affected (0.01 sec)

mysql&gt; INSERT INTO imp (important) VALUES (0), (0), (0), (1), (0), (1), (1), (1), (0), (0), (0), (1);
Query OK, 12 rows affected (0.00 sec)
Records: 12  Duplicates: 0  Warnings: 0


You will see that BOOLEAN is just an alias for tinyint(1):

mysql&gt; SHOW CREATE TABLE imp;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                      |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| imp   | CREATE TABLE `imp` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `important` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=latin1 |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+


And you can even insert a 2 value:

mysql&gt; INSERT INTO imp (important) VALUES (2);
Query OK, 1 row affected (0.00 sec)

mysql&gt; SELECT * FROM imp WHERE important = 2;
+----+-----------+
| id | important |
+----+-----------+
| 13 |         2 |
+----+-----------+
1 row in set (0.00 sec)


The less traumatic way, but more secure and flexible that I can think is, instead of creating an enum or a string, reuse the column and set a foreign key if you are using InnoDB:

mysql&gt; CREATE TABLE levels (id tinyint primary key, name varchar(30));
Query OK, 0 rows affected (0.01 sec)

mysql&gt; insert into levels values (0, 'normal'), (1, 'urgent'), (2, 'extreme');  Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql&gt; ALTER TABLE imp ADD CONSTRAINT important FOREIGN KEY (important) REFERENCES levels(id);
Query OK, 13 rows affected (0.02 sec)
Records: 13  Duplicates: 0  Warnings: 0


That way you cannot insert values that do not exist on the levels table and you can add values later very easily (also, you do not have to rebuild the original table).