Làm cách nào để thay đổi kiểu dữ liệu cho một cột trong MySQL?


489

Tôi muốn thay đổi kiểu dữ liệu của nhiều cột từ float sang int. Cách đơn giản nhất để làm điều này là gì?

Không có dữ liệu để lo lắng, chưa.


6
Chỉ cần làm cho điều này rõ ràng, ALTER TABLEtrên thực tế, các câu trả lời (sử dụng ) sẽ hoạt động ngay cả khi cột đã chứa dữ liệu. Tuy nhiên, việc chuyển đổi một cột float thành một cột số nguyên sẽ khiến bất kỳ giá trị không nguyên nào trong đó được làm tròn thành số nguyên gần nhất.
Ilmari Karonen

Câu trả lời:


898

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

ALTER TABLE tablename MODIFY columnname INTEGER;

Điều này sẽ thay đổi kiểu dữ liệu của cột đã cho

Tùy thuộc vào các cột mà bạn muốn sửa đổi, có thể tốt nhất để tạo tập lệnh hoặc sử dụng một số loại GUI máy khách mysql


88
Nhắc nhở thân thiện - Mặc định cho các cột là NULLABLE, vì vậy nếu bạn có cột KHÔNG NULL, đừng quên sử dụng "MODIFY tên cột INTEGER KHÔNG NULL" nếu không bạn sẽ thay đổi cột của mình từ KHÔNG NULL thành NULL.
Despertar

3
Sẽ thay đổi bảng xóa dữ liệu trên bảng hoặc thất bại trong việc thực thi nếu có gì đó không phải là khiếu nại với loại cột mới?
EndermanAPM

1
ALTER TABLE tablename MODIFY tên cột INTEGER không dấu; <- nếu bạn quan tâm đến cột mới không được ký. Là trường hợp của tôi.
mircealungu

Tôi nghĩ rằng cảnh báo @Despertars cũng có thể có liên quan để giữ bất kỳ thông số kỹ thuật nào của CHARSET hoặc THU.
Halvor Holsten Strand

44
alter table table_name modify column_name int(5)

37

Bạn cũng có thể sử dụng điều này:

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

12

Nếu bạn muốn thay đổi tất cả các cột của một loại nhất định sang loại khác, bạn có thể tạo các truy vấn bằng cách sử dụng một truy vấn như thế này:

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

Ví dụ: nếu bạn muốn thay đổi các cột từ tinyint(4)sang bit(1), hãy chạy nó như thế này:

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

và nhận được một đầu ra như thế này:

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;

!! Không giữ ràng buộc duy nhất, nhưng nên được dễ dàng cố định với một if-parameter tới concat. Tôi sẽ để nó cho độc giả thực hiện nếu cần ..


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

Ví dụ :

Alter TABLE `tbl_users` MODIFY COLUMN `dup` VARCHAR(120);

5

Bạn sử dụng alter table ... change ...phương pháp, ví dụ:

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)

Tôi tin rằng đó là MODIFY thay vì thay đổi, nhưng có lẽ cả hai đều hoạt động.
Zsolt Szilagyi

4

Để thay đổi kiểu dữ liệu cột, có phương thức thay đổi và phương thức sửa đổi

ALTER TABLE student_info CHANGE roll_no roll_no VARCHAR(255);

ALTER TABLE student_info MODIFY roll_no VARCHAR(255);

Để thay đổi tên trường cũng sử dụng phương thức thay đổi

ALTER TABLE student_info CHANGE roll_no identity_no VARCHAR(255);


0

Nếu bạn muốn thay đổi các chi tiết cột thêm một nhận xét, sử dụng này

ALTER TABLE [table_name] MODIFY [column_name] [new data type] DEFAULT [VALUE] COMMENT '[column comment]' 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.