Как я могу изменить размер столбца в таблице MySQL?


301

Я создал таблицу и случайно поставил varcharдлину 300вместо 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), он будет вырезать любые существующие данные из столбцов. Согласно этому конкретному вопросу, увеличение столбца не будет иметь проблемы с данными.
Уоррен Сержант

8
@WarrenSergent, протестированный в 5.7.15, выдаст ошибку, если есть изменения, затронутые изменением. Он не будет усекаться по умолчанию. Вам нужно будет обновить значения заранее с помощью SUBSTR.
Роберт Т.

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), чтобы ваш исходный вопрос был неверно истолкован , что может сделать MySQL, если этот размер столбца, суммируемый с другими столбцами таблицы, не превышает 65535.

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 изменит только тип данных столбца
Майк Динеску
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.