ฉันจะปรับขนาดคอลัมน์ในตาราง 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) จะเป็นการตัดข้อมูลที่มีอยู่จากคอลัมน์ ตามคำถามเฉพาะนี้การทำให้คอลัมน์ใหญ่ขึ้นจะไม่มีปัญหากับข้อมูล
Warren Sergent

8
@WarrenSergent ทดสอบใน 5.7.15 แล้วจะมีข้อผิดพลาดหากมีค่าที่ได้รับผลกระทบจากการเปลี่ยนแปลง มันจะไม่ถูกตัดทอนโดยค่าเริ่มต้น คุณจะต้องอัปเดตค่าล่วงหน้าด้วย SUBSTR
Robert T.

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 ขอบคุณ
vehomzzz

3
@Bill: CHANGE โดยทั่วไปจะใช้ในการเปลี่ยนชื่อคอลัมน์และเปลี่ยนเป็นชนิดข้อมูล MODIFY จะเปลี่ยนประเภทข้อมูลของคอลัมน์เท่านั้น
Mike Dinescu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.