Tôi muốn thay đổi kiểu dữ liệu của nhiều cột từ phao sang int. Cách đơn giản nhất để làm điều này là gì?Làm cách nào để thay đổi kiểu dữ liệu cho một cột trong MySQL?
Không có dữ liệu nào phải lo lắng.
Tôi muốn thay đổi kiểu dữ liệu của nhiều cột từ phao sang int. Cách đơn giản nhất để làm điều này là gì?Làm cách nào để thay đổi kiểu dữ liệu cho một cột trong MySQL?
Không có dữ liệu nào phải lo lắng.
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
ALTER TABLE tablename MODIFY columnname INTEGER;
này sẽ thay đổi kiểu dữ liệu của cột trao
Tùy thuộc vào howmany cột mà bạn muốn chỉnh sửa nó có thể là tốt nhất để tạo ra một kịch bản, hoặc sử dụng một số loại mysql client GUI
Lời nhắc thân thiện - Mặc định cho cột là NULLABLE, vì vậy nếu bạn có cột NOT NULL, đừng quên sử dụng "MODIFY columnname INTEGER NOT NULL" nếu không bạn sẽ thay đổi cột từ NOT NULL thành NULL. – Despertar
Sẽ thay đổi bảng xóa dữ liệu trên bảng hoặc không thực hiện được nếu có điều gì đó không có khiếu nại với loại cột mới? – EndermanAPM
ALTER TABLE tablename MODIFY columnname INTEGER unsigned; <- nếu bạn quan tâm đến cột mới chưa được ký. Là trường hợp của tôi. – mircealungu
Bạn sử dụng phương thức alter table ... change ...
, 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)
alter table table_name modify column_name int(5)
Bạn cũng có thể sử dụng này:
ALTER TABLE [tablename] CHANGE [columnName] [columnName] DECIMAL (10,2)
Nếu bạn muốn thay đổi tất cả các cột của một loại nhất định để loại khác, bạn có thể tạo ra các truy vấn 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ột từ tinyint(4)
thành bit(1)
, hãy chạy như sau:
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 kết quả như sau:
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ữ các ràng buộc duy nhất, nhưng phải dễ dàng được sửa với một thông số if
khác thành concat
. Tôi sẽ để lại nó lên đến người đọc để thực hiện điều đó nếu cần thiết ..
Alter TABLE `tableName` MODIFY COLUMN `ColumnName` datatype(length);
Ex:
Alter TABLE `tbl_users` MODIFY COLUMN `dup` VARCHAR(120);
Chỉ cần để làm cho rõ ràng, câu trả lời dưới đây (sử dụng 'ALTER TABLE') sẽ , trên thực tế, 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ẽ gây ra bất kỳ giá trị không nguyên nào trong nó được làm tròn đến số nguyên gần nhất. –