MySQL에서 열의 데이터 유형을 어떻게 변경합니까?


488

여러 열의 데이터 유형을 float에서 int로 변경하고 싶습니다. 가장 간단한 방법은 무엇입니까?

아직 걱정할 데이터가 없습니다.


6
이것을 명시 적으로 만들기 위해 ALTER TABLE실제로 열에 이미 데이터가 포함되어 있어도 아래의 (을 사용하여 ) 대답이 작동합니다. 그러나 부동 열을 정수 열로 변환하면 정수가 아닌 값이 가장 가까운 정수로 반올림됩니다.
Ilmari Karonen

답변:


897

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

ALTER TABLE tablename MODIFY columnname INTEGER;

주어진 열의 데이터 유형이 변경됩니다

수정하려는 howmany 열에 따라 스크립트를 생성하거나 일종의 mysql 클라이언트 GUI를 사용하는 것이 가장 좋습니다.


88
친절한 알림-열의 기본값은 NULLABLE이므로 NOT NULL 열이있는 경우 "MODIFY columnname INTEGER NOT NULL"을 사용하는 것을 잊지 마십시오. 그렇지 않으면 열이 NOT NULL에서 NULL로 변경됩니다.
Despertar

3
alter column이 테이블의 데이터를 삭제하거나 새로운 열 유형에 불만이있는 경우 실행에 실패합니까?
EndermanAPM

1
ALTER TABLE tablename MODIFY columnname INTEGER 부호 없음; <-서명되지 않은 새 열에 관심이있는 경우. 내 사건 이었어
mircealungu

@Despertars 경고는 CHARSET 또는 COLLATE의 사양을 유지하는 것과 관련이 있다고 생각합니다.
Halvor Holsten Strand

44
alter table table_name modify column_name int(5)

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. 필요한 경우이를 구현하기 위해 독자에게 맡기겠습니다 ..


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

예 :

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

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 Szilagyi

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


0

열 세부 사항을 변경하려면 주석을 추가하십시오.

ALTER TABLE [table_name] MODIFY [column_name] [new data type] DEFAULT [VALUE] COMMENT '[column comment]' 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.