Bir mysql tablosundaki sütun boyutunu nasıl değiştirebilirim?


301

Bir tablo oluşturdum ve bunun yerine yanlışlıkla varcharuzunluk koydum . Bunu nasıl düzeltebilirim?30065353

Bir örnek takdir edilecektir.

Yanıtlar:


571

Bunu denedin mi?

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

Bu, col_name türünüVARCHAR(65353)


14
Bu verileri sağlam tutar mı?
Flimm

1
@Flimm bana benziyor.
deed02392

39
@Flimm - sadece bir işaretçi, eğer bir VARCHAR (100) varsa ve onu VARCHAR (50) olarak değiştirirseniz, mevcut veriler sütunlardan kesilir. Bu özel soruya göre, bir sütunu büyütmek verilerle ilgili bir sorun oluşturmaz.
Warren Sergent

8
@WarrenSergent, 5.7.15'te test edildi, değişiklikten etkilenen değerler varsa bir hata atar. Varsayılan olarak kesilmez. Değerleri önceden bir SUBSTR ile güncellemeniz gerekir.
Robert T.

1
@animo haklı. Tam bir cevap için buna bakın stackoverflow.com/a/9611293/1594933
gontard

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

Adını değiştirmeseniz bile sütun adını iki kez listelemeniz gerekir.

Bu değişikliği yaptıktan sonra sütunun veri türünün olacağını unutmayın MEDIUMTEXT.


Miky D doğrudur, MODIFYkomut bunu daha kısaca yapabilir.


Re MEDIUMTEXTşey: MySQL satır sadece 65535 bayt (değil sayma BLOB / METİN sütun) olabilir. Bir sütunu çok büyük olacak şekilde değiştirmeye çalışırsanız, satırın toplam boyutunu 65536 veya daha büyük yaparsanız, bir hata alabilirsiniz. Bir sütunu bildirmeye çalışırsanız VARCHAR(65536), o tablodaki tek sütun olsa bile çok büyüktür, bu nedenle MySQL otomatik olarak bir MEDIUMTEXTveri türüne dönüştürür .

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)Tablodaki diğer sütunlarla toplanan sütun boyutu 65535'i geçmediği sürece, MySQL'in yapabileceği orijinal sorunuzu yanlış okudum.

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 siz de aynı cevaba sahipsiniz. sütunun veri türünün MEDIUMTEXT olacağı ne anlama geliyor? thx
vehomzzz

3
@Bill: CHANGE genellikle bir sütunu yeniden adlandırmak ve veri türünü değiştirmek için kullanılır. MODIFY yalnızca sütunun veri türünü değiştirir
Mike Dinescu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.