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

271

Я создал таблицу и случайно поставил varchar длиной 300 вместо 65353. Как я могу это исправить?

Пример будет оценен.

Теги:
database
alter-table

2 ответа

492
Лучший ответ

Вы пробовали это?

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

Это изменит тип col_name на VARCHAR(65353)

  • 1
    +1 это именно то, что мне нужно ... спасибо ...
  • 0
    рад помочь. @Bill предложил использовать CHANGE вместо MODIFY, что сработает, но CHANGE также переименует столбец, поэтому вам нужно дважды ввести имя столбца.
Показать ещё 7 комментариев
22
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
  • 0
    +1 у вас, ребята, тот же ответ. что значит тип данных столбца будет MEDIUMTEXT? Спасибо
  • 3
    @Bill: CHANGE обычно используется для переименования столбца и изменения его типа данных. MODIFY изменит только тип данных столбца

Ещё вопросы

Сообщество Overcoder
Наверх
Меню