varchar (สูงสุด) ใน MySQL เท่ากับอะไร?
varchar (สูงสุด) ใน MySQL เท่ากับอะไร?
คำตอบ:
ความยาวสูงสุดของ varchar ขึ้นอยู่กับขนาดแถวสูงสุดใน MySQL ซึ่งเป็น 64KB (ไม่นับ BLOB):
VARCHAR(65535)
อย่างไรก็ตามโปรดทราบว่าขีด จำกัด ต่ำกว่าหากคุณใช้ชุดอักขระแบบหลายไบต์:
VARCHAR(21844) CHARACTER SET utf8
นี่คือตัวอย่างบางส่วน:
ขนาดแถวสูงสุดคือ 65535 แต่ varchar ยังรวมไบต์หรือสองเพื่อเข้ารหัสความยาวของสตริงที่กำหนด ดังนั้นคุณไม่สามารถประกาศค่า varchar ของขนาดแถวสูงสุดได้แม้ว่าจะเป็นคอลัมน์เดียวในตาราง
mysql> CREATE TABLE foo ( v VARCHAR(65534) );
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
แต่ถ้าเราลองลดความยาวลงเราจะพบความยาวที่สุดที่ใช้ได้:
mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)
ตอนนี้ถ้าเราพยายามใช้ชุดอักขระหลายไบต์ที่ระดับตารางเราจะพบว่ามันนับจำนวนอักขระแต่ละตัวเป็นหลายไบต์ สตริง UTF8 ไม่จำเป็นต้องใช้หลายไบต์ต่อสตริง แต่ MySQL ไม่สามารถสรุปได้ว่าคุณจะ จำกัด การแทรกในอนาคตของคุณทั้งหมดให้เป็นอักขระไบต์เดียว
mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8;
ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead
แม้จะมีข้อผิดพลาดล่าสุดบอกเราว่า InnoDB ยังคงไม่ชอบความยาว 21845
mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
นี่เหมาะสมอย่างยิ่งหากคุณคำนวณว่า 21845 * 3 = 65535 ซึ่งจะไม่ได้ผล โดยที่ 21844 * 3 = 65532 ซึ่งทำงานได้
mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)
DEFAULT
ค่าสำหรับคอลัมน์ ไม่สามารถทำได้ด้วยประเภท TEXT หรือ BLOB
TEXT
จำกัดความยาวไม่เกิน 64K MEDIUMTEXT
จำกัดความยาวไม่เกิน 16M LONGTEXT
ความยาวสูงสุดคือ 4G
varchar(max)
ประเภทคอลัมน์ของ SQL Server
TLDR; MySql ไม่มีแนวคิดเทียบเท่าvarchar(max)
นี่คือคุณสมบัติ MS SQL Server
varchar(max)
เป็นคุณสมบัติของ Microsoft SQL Server
จำนวนข้อมูลที่คอลัมน์สามารถจัดเก็บในรุ่นเซิร์ฟเวอร์ Microsoft SQL ก่อนหน้ารุ่น 2005 ถูก จำกัด ที่ 8KB เพื่อที่จะเก็บมากกว่า 8KB คุณจะต้องใช้TEXT
, NTEXT
หรือBLOB
คอลัมน์ประเภทประเภทคอลัมน์เหล่านี้ข้อมูลที่เก็บไว้ของพวกเขาเป็นคอลเลกชันของ 8K หน้าแยกจากหน้าข้อมูลตาราง; พวกเขารองรับการจัดเก็บมากถึง 2GB ต่อแถว
ข้อแม้ใหญ่ประเภทคอลัมน์เหล่านี้คือการที่พวกเขามักจะต้องฟังก์ชั่นพิเศษและงบในการเข้าถึงและแก้ไขข้อมูล (เช่นREADTEXT
, WRITETEXT
และUPDATETEXT
)
ใน SQL Server 2005 varchar(max)
ถูกนำมาใช้เพื่อรวมข้อมูลและแบบสอบถามที่ใช้ในการดึงและแก้ไขข้อมูลในคอลัมน์ขนาดใหญ่ ข้อมูลสำหรับvarchar(max)
คอลัมน์จะถูกจัดเก็บแบบอินไลน์กับหน้าข้อมูลตาราง
เมื่อข้อมูลในคอลัมน์ MAX เติมหน้าข้อมูล 8KB หน้าล้นจะได้รับการจัดสรรและหน้าก่อนหน้าชี้ไปที่มันเป็นรายการที่เชื่อมโยง ซึ่งแตกต่างจากTEXT
, NTEXT
และคอลัมน์ชนิดสนับสนุนทุกความหมายแบบสอบถามเดียวกันกับประเภทคอลัมน์อื่น ๆBLOB
varchar(max)
ดังนั้นvarchar(MAX)
จริงๆแล้วหมายถึงvarchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING)
และไม่varchar(MAX_SIZE_OF_A_COLUMN)
และไม่ได้
เพื่อให้ได้พื้นที่เก็บข้อมูลเท่ากันกับ a varchar(max)
ใน MySql คุณจะต้องเปลี่ยนเป็นBLOB
ประเภทคอลัมน์ บทความนี้กล่าวถึงวิธีที่มีประสิทธิภาพมากในการจัดเก็บข้อมูลจำนวนมากใน MySql ได้อย่างมีประสิทธิภาพ
varchar(max)
จริงๆ
ความยาวสูงสุดของ varchar คือ
65535
หารด้วยความยาวสูงสุดไบต์ของอักขระในชุดอักขระคอลัมน์ถูกตั้งค่าเป็น (เช่น utf8 = 3 ไบต์, ucs2 = 2, latin1 = 1)
ลบ 2 ไบต์เพื่อเก็บความยาว
ลบความยาวของคอลัมน์อื่นทั้งหมด
ลบ 1 ไบต์สำหรับทุก 8 คอลัมน์ที่เป็นโมฆะ หากคอลัมน์ของคุณเป็นโมฆะ / ไม่เป็นโมฆะสิ่งนี้จะถูกจัดเก็บเป็นหนึ่งบิตในไบต์ / ไบต์ที่เรียกว่ามาสก์ null ซึ่งเป็น 1 บิตต่อคอลัมน์ที่เป็นโมฆะ
แก้ไขตาราง prg_ar_report_colors เพิ่ม Text_Color_Code VARCHAR (สูงสุด);
แก้ไขตาราง prg_ar_report_colors เพิ่ม Text_Color_Code longtext;
แก้ไขตาราง prg_ar_report_colors เพิ่ม Text_Color_Code CLOB;
Mysql แปลงคอลัมน์จาก VARCHAR เป็น TEXT เมื่อมีขนาด จำกัด !!!
mysql> CREATE TABLE varchars1(ch3 varchar(6),ch1 varchar(3),ch varchar(4000000))
;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS;
+-------+------+---------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------+
| Note | 1246 | Converting column 'ch' from VARCHAR to TEXT |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)
mysql>
ความยาวสูงสุดของ varchar ใน MySQL 5.6.12 คือ 4294967295