Як змінити тип даних для стовпця в MySQL?


488

Я хочу змінити тип даних декількох стовпців з float на int. Який найпростіший спосіб це зробити?

Поки що немає даних, що турбуватися.


6
Просто для того, щоб зробити це явним, відповіді, наведені нижче (використовуючи ALTER TABLE), насправді працюватимуть, навіть якщо стовпець уже містить дані. Однак перетворення стовпчика з плавкою в цілий цілий стовпець призведе до округлення будь-яких не цілих значень у ньому до найближчого цілого числа.
Ілмарі Каронен

Відповіді:


897

http://dev.mysql.com/doc/refman/5.1/uk/alter-table.html

ALTER TABLE tablename MODIFY columnname INTEGER;

Це змінить тип даних даного стовпця

Залежно від кількості колонок, які ви бажаєте змінити, можливо, найкраще створити сценарій або використовувати якийсь графічний інтерфейс клієнта mysql


88
Примітка про дружнє значення - Типовим для стовпців є NULLABLE, тому якщо у вас стовпець NOT NULL, не забудьте використати "MODIFY ім'я стовпця INTEGER NOT NULL", інакше ви зміните свій стовпець з NOT NULL на NULL.
Деспертар

3
Чи змінить таблицю видалення даних таблиці або не вдасться виконати, якщо щось не подасть скарги на новий тип стовпця?
EndermanAPM

1
ALTER TABLE ім'я таблиці MODIFY ім'я стовпця INTEGER не підписане; <- якщо ви дбаєте про те, щоб новий стовпець не був підписаний. Була моя справа.
mircealungu

Я думаю, що попередження @Despertars також може бути актуальним для збереження будь-яких специфікацій CHARSET або COLLATE.
Halvor Holsten Strand


37

Ви також можете скористатися цим:

ALTER TABLE [tablename] CHANGE [columnName] [columnName] DECIMAL (10,2)

12

Якщо ви хочете змінити всі стовпці певного типу на інший, ви можете генерувати запити, використовуючи такий запит:

select distinct concat('alter table ',
                       table_name,
                       ' modify ',
                       column_name,
                       ' <new datatype> ',
                       if(is_nullable = 'NO', ' NOT ', ''),
                       ' NULL;')
  from information_schema.columns
  where table_schema = '<your database>' 
    and column_type = '<old datatype>';

Наприклад, якщо ви хочете змінити стовпці tinyint(4)на bit(1), запустіть його так:

select distinct concat('alter table ',
                       table_name,
                       ' modify ',
                       column_name,
                       ' bit(1) ',
                       if(is_nullable = 'NO', ' NOT ', ''),
                       ' NULL;')
  from information_schema.columns
  where table_schema = 'MyDatabase' 
    and column_type = 'tinyint(4)';

і отримати такий вихід:

alter table table1 modify finished bit(1)  NOT  NULL;
alter table table2 modify canItBeTrue bit(1)  NOT  NULL;
alter table table3 modify canBeNull bit(1)  NULL;

!! Не зберігає унікальних обмежень, але їх слід легко зафіксувати іншим параметром ifдо concat. Я залишаю це читачеві, щоб реалізувати це, якщо потрібно.



5

Ви використовуєте alter table ... change ...метод, наприклад:

mysql> create table yar (id int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into yar values(5);
Query OK, 1 row affected (0.01 sec)

mysql> alter table yar change id id varchar(255);
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> desc yar;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | varchar(255) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
1 row in set (0.00 sec)

Я вважаю, що це МОДИФІЯ, а не зміна, але, можливо, обидва працюють.
Zsolt

4

Для зміни типу даних стовпців існують метод зміни та метод модифікації

ALTER TABLE student_info CHANGE roll_no roll_no VARCHAR(255);

ALTER TABLE student_info MODIFY roll_no VARCHAR(255);

Для зміни назви поля також використовуйте метод зміни

ALTER TABLE student_info CHANGE roll_no identity_no VARCHAR(255);

1

https://dev.mysql.com/doc/refman/8.0/en/alter-table.html

Ви також можете встановити значення стовпця за замовчуванням, просто додайте ключове слово DEFAULT, а потім значення.

ALTER TABLE [table_name] MODIFY [column_name] [NEW DATA TYPE] DEFAULT [VALUE];

Це також працює для MariaDB (тестована версія 10.2)


0

Якщо ви хочете змінити деталі стовпця, додайте коментар, скористайтеся цим

ALTER TABLE [table_name] MODIFY [column_name] [new data type] DEFAULT [VALUE] COMMENT '[column comment]' 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.