Bagaimana saya bisa memodifikasi ukuran kolom dalam tabel mysql?

301

Saya telah membuat tabel dan secara tidak sengaja menempatkan varcharpanjang sebagai 300ganti 65353. Bagaimana saya bisa memperbaikinya?

Sebuah contoh akan dihargai.

Vehomzzz
sumber

Jawaban:

571

Sudahkah Anda mencoba ini?

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

Ini akan mengubah tipe col_name menjadiVARCHAR(65353)

Mike Dinescu
sumber
14
Apakah ini menjaga data tetap utuh?
Flimm
1
@Flimm sepertinya bagi saya.
deed02392
39
@ Flimm - hanya sebuah pointer, jika Anda memiliki VARCHAR (100) dan Anda mengubahnya menjadi VARCHAR (50) itu akan memotong data yang ada dari kolom. Namun, sesuai pertanyaan khusus ini, membuat kolom lebih besar tidak akan memiliki masalah dengan data.
Warren Sergent
8
@ WarrenSergent, diuji di 5.7.15, itu akan melempar kesalahan jika ada nilai yang dipengaruhi oleh perubahan. Ini tidak akan terpotong secara default. Anda harus memperbarui nilai sebelumnya dengan SUBSTR.
Robert T.
1
@ Animo benar. Lihat ini untuk jawaban yang lengkap stackoverflow.com/a/9611293/1594933
gontard
26
ALTER TABLE <tablename> CHANGE COLUMN <colname> <colname> VARCHAR(65536);

Anda harus mencantumkan nama kolom dua kali, bahkan jika Anda tidak mengubah namanya.

Perhatikan bahwa setelah Anda melakukan perubahan ini, tipe data kolom akan menjadi MEDIUMTEXT.


Miky D benar, MODIFYperintah dapat melakukan ini dengan lebih ringkas.


Re MEDIUMTEXThal: deretan MySQL dapat hanya 65.535 bytes (tidak termasuk kolom / TULISAN). Jika Anda mencoba mengubah kolom menjadi terlalu besar, membuat ukuran total baris 65536 atau lebih besar, Anda mungkin mendapatkan kesalahan. Jika Anda mencoba mendeklarasikan kolom VARCHAR(65536)maka itu terlalu besar bahkan jika itu adalah satu-satunya kolom dalam tabel itu, jadi MySQL secara otomatis mengonversinya menjadi MEDIUMTEXTtipe data.

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)

Saya salah membaca pertanyaan awal Anda, yang Anda inginkan VARCHAR(65353), yang dapat dilakukan MySQL, selama ukuran kolom tersebut dijumlahkan dengan kolom lain dalam tabel tidak melebihi 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
Bill Karwin
sumber
+1, kalian memiliki jawaban yang sama. apa artinya tipe data kolom akan menjadi MEDIUMTEXT? thx
vehomzzz
3
@ Bill: Ganti umumnya digunakan untuk mengubah nama kolom dan mengubah tipe datanya. MODIFY hanya akan mengubah tipe data kolom
Mike Dinescu