ตามเอกสารของ MySQLมี TEXT สี่ประเภท:
- TINYTEXT
- ข้อความ
- MEDIUMTEXT
- LONGTEXT
ความยาวสูงสุดที่ฉันสามารถจัดเก็บในคอลัมน์ของแต่ละประเภทข้อมูลคืออะไรคือการเข้ารหัสอักขระ UTF-8
ตามเอกสารของ MySQLมี TEXT สี่ประเภท:
ความยาวสูงสุดที่ฉันสามารถจัดเก็บในคอลัมน์ของแต่ละประเภทข้อมูลคืออะไรคือการเข้ารหัสอักขระ UTF-8
คำตอบ:
จากเอกสาร :
ประเภท | ความยาวสูงสุด ----------- + ------------------------------------- TINYTEXT | 255 (2 8 −1) ไบต์ TEXT | 65,535 (2 16 −1) ไบต์ = 64 KiB MEDIUMTEXT | 16,777,215 (2 24 −1) ไบต์ = 16 MiB LONGTEXT | 4,294,967,295 (2 32 −1) ไบต์ = 4 GiB
โปรดทราบว่าจำนวนตัวอักษรที่สามารถเก็บไว้ในคอลัมน์ของคุณจะขึ้นอยู่กับการเข้ารหัสอักขระ
A TEXT column with a maximum length of 255 (28 – 1) characters. The effective maximum length is less if the value contains multi-byte characters.
ดูคำตอบของ Ankan สำหรับรายละเอียดเพิ่มเติม
การขยายตัวของคำตอบเดียวกัน
นี่คือตารางประมาณการที่เข้มงวดสำหรับการตัดสินใจที่รวดเร็ว!
xx
Type | A= worst case (x/3) | B = best case (x) | words estimate (A/4.5) - (B/4.5)
-----------+---------------------------------------------------------------------------
TINYTEXT | 85 | 255 | 18 - 56
TEXT | 21,845 | 65,535 | 4,854.44 - 14,563.33
MEDIUMTEXT | 5,592,415 | 16,777,215 | 1,242,758.8 - 3,728,270
LONGTEXT | 1,431,655,765 | 4,294,967,295 | 318,145,725.5 - 954,437,176.6
โปรดอ้างอิงคำตอบของ Chris V เช่นกัน: https://stackoverflow.com/a/35785869/1881812
TINYTEXT
นับ 1 ไบต์ + 8 ไบต์กับขนาดของการบันทึกในขณะที่VARCHAR(255)
นับตั้งแต่วันที่ 1 ไบต์ + 255 ไบต์ถึง 2 ไบต์ + 1020 ไบต์ (4 ไบต์ UTF-8 ตัวอักษร) กับขนาดของการบันทึก
เพิ่มขึ้นเป็นความท้าทายของ @ Ankan-Zerob นี่คือการประเมินความยาวสูงสุดของฉันซึ่งสามารถเก็บไว้ในข้อความแต่ละประเภทที่วัดด้วยคำ :
Type | Bytes | English words | Multi-byte words
-----------+---------------+---------------+-----------------
TINYTEXT | 255 | ±44 | ±23
TEXT | 65,535 | ±11,000 | ±5,900
MEDIUMTEXT | 16,777,215 | ±2,800,000 | ±1,500,000
LONGTEXT | 4,294,967,295 | ±740,000,000 | ±380,000,000
ในภาษาอังกฤษ 4.8 ตัวอักษรต่อคำอาจเป็นค่าเฉลี่ยที่ดี (เช่นnorvig.com/mayzner.html ) แม้ว่าความยาวของคำจะแตกต่างกันไปตามโดเมน (เช่นภาษาพูดกับเอกสารทางวิชาการ) ดังนั้นจึงไม่มีจุดที่แม่นยำเกินไป ภาษาอังกฤษส่วนใหญ่เป็นอักขระ ASCII ไบต์เดียวโดยมีอักขระหลายไบต์เป็นครั้งคราวดังนั้นใกล้กับหนึ่งไบต์ต่อตัวอักษร ต้องมีอักขระพิเศษสำหรับเว้นวรรคระหว่างคำดังนั้นฉันจึงปัดเศษลงจาก 5.8 ไบต์ต่อคำ ภาษาที่มีสำเนียงจำนวนมากเช่นพูดว่าโปแลนด์จะเก็บคำศัพท์ได้น้อยกว่าเล็กน้อยเช่นกันเช่นภาษาเยอรมันที่มีคำที่ยาวกว่า
ภาษาที่ต้องใช้อักขระหลายไบต์เช่นกรีก, อาหรับ, ฮิบรู, ฮินดี, ไทย, ฯลฯ โดยทั่วไปต้องใช้สองไบต์ต่ออักขระใน UTF-8 การคาดเดาอย่างคร่าวๆที่ 5 ตัวอักษรต่อคำฉันได้ปัดลงจาก 11 ไบต์ต่อคำ
สคริปต์ CJK (Hanzi, Kanji, Hiragana, Katakana ฯลฯ ) ฉันไม่รู้อะไรเลย ฉันเชื่อว่าตัวละครส่วนใหญ่ต้องการ 3 ไบต์ใน UTF-8 และ (ด้วยการทำให้เข้าใจง่ายมาก) พวกเขาอาจได้รับการพิจารณาให้ใช้ประมาณ 2 ตัวอักษรต่อคำดังนั้นพวกเขาจะอยู่ที่ไหนสักแห่งระหว่างอีกสองคน (สคริปต์ CJK มีแนวโน้มที่จะต้องใช้พื้นที่เก็บข้อมูลน้อยลงโดยใช้ UTF-16 ขึ้นอยู่กับ)
แน่นอนว่าไม่สนใจค่าโสหุ้ยการจัดเก็บ ฯลฯ
มันดี แต่ไม่ตอบคำถาม:
"ควรใช้ VARCHAR แทน TINYTEXT เสมอ" Tinytext มีประโยชน์ถ้าคุณมีแถวกว้าง - เนื่องจากข้อมูลถูกเก็บไว้นอกบันทึก มีค่าใช้จ่ายด้านประสิทธิภาพ แต่ไม่มีประโยชน์