Страницы

Поиск по вопросам

вторник, 16 июля 2019 г.

Поле enum vs varchar, конвертация в mysql

Есть таблица в которой есть поле типа 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 | |-----|-----| | три | три | | раз | раз | | два | два | | раз | раз |

Комментариев нет:

Отправить комментарий