Як я можу змінити розмір стовпця в таблиці 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: ЗМІНА зазвичай використовується для перейменування стовпця та зміни його типу даних. MODIFY змінить лише тип даних стовпця
Майк Дінеску,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.