Bagaimana cara mengubah tipe data untuk kolom di MySQL?

489

Saya ingin mengubah tipe data beberapa kolom dari float ke int. Apa cara paling sederhana untuk melakukan ini?

Belum ada data yang perlu dikhawatirkan.

Eric Wilson
sumber
6
Hanya untuk membuat ini eksplisit, jawaban di bawah ini (menggunakan ALTER TABLE) akan, pada kenyataannya, bekerja bahkan jika kolom sudah berisi data. Namun, mengubah kolom float menjadi kolom integer akan menyebabkan nilai non-integer di dalamnya dibulatkan ke integer terdekat.
Ilmari Karonen

Jawaban:

898

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

ALTER TABLE tablename MODIFY columnname INTEGER;

Ini akan mengubah tipe data dari kolom yang diberikan

Bergantung pada berapa banyak kolom yang ingin Anda modifikasi, mungkin yang terbaik adalah membuat skrip, atau menggunakan semacam GUI klien mysql

Yannick Motton
sumber
88
Pengingat ramah - Default untuk kolom adalah NULLABLE, jadi jika Anda memiliki kolom NOT NULL, jangan lupa untuk menggunakan "MODIFY columnname INTEGER NOT NULL" atau Anda akan mengubah kolom Anda dari NOT NULL ke NULL.
Despertar
3
Apakah tabel akan menghapus data di atas meja atau gagal pada eksekusi jika ada sesuatu yang tidak sesuai dengan jenis kolom baru?
EndermanAPM
1
ALTER TABLE tablename MODIFY nama kolom INTEGER tidak ditandatangani; <- jika Anda peduli dengan kolom baru yang tidak ditandatangani. Adalah kasus saya.
mircealungu
Saya pikir peringatan @despertars mungkin juga relevan untuk menjaga spesifikasi CHARSET atau COLLATE.
Halvor Holsten Strand
44
alter table table_name modify column_name int(5)
php
sumber
37

Anda juga dapat menggunakan ini:

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

Jika Anda ingin mengubah semua kolom dari jenis tertentu ke jenis lain, Anda dapat membuat kueri menggunakan kueri seperti ini:

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>';

Misalnya, jika Anda ingin mengubah kolom dari tinyint(4)menjadi bit(1), jalankan seperti ini:

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)';

dan dapatkan output seperti ini:

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;

!! Tidak menyimpan batasan unik, tetapi harus mudah diperbaiki dengan ifparameter -parameter lain concat. Saya akan menyerahkannya kepada pembaca untuk mengimplementasikannya jika diperlukan ..

Tobb
sumber
7
Alter TABLE `tableName` MODIFY COLUMN `ColumnName` datatype(length);

Mis:

Alter TABLE `tbl_users` MODIFY COLUMN `dup` VARCHAR(120);
Mahrukh Mehmood
sumber
5

Anda menggunakan alter table ... change ...metode ini, misalnya:

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)
Ólafur Waage
sumber
Saya percaya ini MENGUBAH daripada berubah, tapi mungkin keduanya berfungsi.
Zsolt Szilagyi
4

Untuk mengubah tipe data kolom ada metode perubahan dan metode modifikasi

ALTER TABLE student_info CHANGE roll_no roll_no VARCHAR(255);

ALTER TABLE student_info MODIFY roll_no VARCHAR(255);

Untuk mengubah nama bidang juga gunakan metode perubahan

ALTER TABLE student_info CHANGE roll_no identity_no VARCHAR(255);
Hasib Kamal
sumber
1

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

Anda juga dapat menetapkan nilai default untuk kolom cukup tambahkan kata kunci DEFAULT diikuti oleh nilai.

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

Ini juga berfungsi untuk MariaDB (diuji versi 10.2)

michael01angelo
sumber
0

Jika Anda ingin mengubah detail kolom, tambahkan komentar, gunakan ini

ALTER TABLE [table_name] MODIFY [column_name] [new data type] DEFAULT [VALUE] COMMENT '[column comment]' 
Joe_Tz
sumber