Есть таблица в которой есть поле типа enum, появилась задача поменять работу с этим полем и решили сделать его varchar
При попытке поменять тип поля все записанные в таблице в данном поле значения заменяются на пустоту, а предполагалось что значения сохранятся.
Это я что то делаю не так, или прямой сменой типа тут не обойтись?
Ответ
внутри столбца типа enum хранятся не строки, а числа, что хорошо демонстрирует второй запрос, приведённый ниже.
а сами строки хранятся в описании таблицы (см. запрос номер три).
пример «преобразования» тоже приведён (ненужный столбец после этого можно удалить, а новосозданный — переименовать):
alter table t add column v text;
update t set v=e;
результаты видны в четвёртом запросе.
p.s. я использовал тип text, а не varchar, что в данном случае не играет роли.
SQL Fiddle
MySQL 5.6 Schema Setup
create table t (e enum('раз','два','три'));
insert into t values
('три')
,('раз')
,('два')
,(1)
;
alter table t add column v text;
update t set v=e;
Query 1
select e from t
Results
| e |
|-----|
| три |
| раз |
| два |
| раз |
Query 2
select e+0 from t
Results
| e+0 |
|-----|
| 3 |
| 1 |
| 2 |
| 1 |
Query 3
show columns from t
Results
| COLUMN_NAME | COLUMN_TYPE | IS_NULLABLE | COLUMN_KEY | COLUMN_DEFAULT | EXTRA |
|-------------|-------------------------|-------------|------------|----------------|-------|
| e | enum('раз','два','три') | YES | | (null) | |
| v | text | YES | | (null) | |
Query 4
select * from t
Results
| e | v |
|-----|-----|
| три | три |
| раз | раз |
| два | два |
| раз | раз |
Комментариев нет:
Отправить комментарий