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.