mysql 테이블에서 열 크기를 어떻게 수정합니까?


301

나는 테이블을 만들고 실수 varchar300대신 길이를 넣었다 65353. 어떻게 고칠 수 있습니까?

예를 들어 주시면 감사하겠습니다.

답변:


571

이것을 시도 했습니까?

ALTER TABLE <table_name> MODIFY <col_name> VARCHAR(65353);

이것은 col_name 의 타입을VARCHAR(65353)


14
데이터가 손상되지 않습니까?
Flimm

1
@Flimm은 나를 위해 것 같습니다.
deed02392

39
@Flimm-VARCHAR (100)이 있고 VARCHAR (50)로 변경하면 열에서 기존 데이터가 모두 잘립니다. 그러나이 특정 질문에 따라 열을 더 크게 만들면 데이터에 문제가 없습니다.
Warren Sergent

8
5.7.15에서 테스트 된 @WarrenSergent는 변경의 영향을받는 값이 있으면 오류를 발생시킵니다. 기본적으로 잘리지 않습니다. SUBSTR로 미리 값을 업데이트해야합니다.
Robert T.

1
@animo가 맞습니다. 완전한 응답이 봐 stackoverflow.com/a/9611293/1594933
gontard

26
ALTER TABLE <tablename> CHANGE COLUMN <colname> <colname> VARCHAR(65536);

열 이름을 변경하지 않더라도 열 이름을 두 번 나열해야합니다.

이 변경을 수행 한 후 열의 데이터 유형은입니다 MEDIUMTEXT.


Miky D가 정확하면 MODIFY명령이 더 간결하게 수행 할 수 있습니다.


다시 MEDIUMTEXT말해 : MySQL 행은 65535 바이트 만 가능합니다 (BLOB / TEXT 열은 계산하지 않음). 열을 너무 크게 변경하여 행의 총 크기를 65536 이상으로 만들려고하면 오류가 발생할 수 있습니다. 열을 선언하려고하면 VARCHAR(65536)해당 테이블의 유일한 열인 경우에도 열이 너무 커서 MySQL은 자동으로 MEDIUMTEXT데이터 유형 으로 변환합니다 .

mysql> create table foo (str varchar(300));
mysql> alter table foo modify str varchar(65536);
mysql> show create table foo;
CREATE TABLE `foo` (
  `str` mediumtext
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

VARCHAR(65353)테이블의 다른 열과 합한 열 크기가 65535를 초과하지 않는 한 MySQL에서 할 수있는 원래 질문을 잘못 읽었습니다 .

mysql> create table foo (str1 varchar(300), str2 varchar(300));
mysql> alter table foo modify str2 varchar(65353);
ERROR 1118 (42000): Row size too large. 
The maximum row size for the used table type, not counting BLOBs, is 65535. 
You have to change some columns to TEXT or BLOBs

+1 당신은 같은 대답을 가지고 있습니다. 열의 데이터 유형이 MEDIUMTEXT라는 것은 무엇을 의미합니까? thx
vehomzzz

3
@Bill : CHANGE는 일반적으로 열의 이름을 바꾸고 데이터 유형을 변경하는 데 사용됩니다. MODIFY는 열의 데이터 유형 만 변경합니다.
Mike Dinescu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.