it-swarm.asia

أحجام التخزين القصوى TINYTEXT و TEXT و MEDIUMTEXT و LONGTEXT

لكل مستندات MySQL ، هناك أربعة أنواع نصية:

  1. TINYTEXT
  2. نص
  3. MEDIUMTEXT
  4. LONGTEXT

ما هو الحد الأقصى للطول الذي يمكنني تخزينه في عمود من كل نوع بيانات على افتراض أن ترميز الأحرف هو UTF-8؟

698
Lalith B

من الوثائق :

 النوع | الحد الأقصى للطول 
 ----------- + ------------------------------- ------ 
 TINYTEXT | 255 (2  8−1) بايت 
 النص | 65.535 (216−1) بايت = 64 كيلوبايت 
 MEDIUMTEXT | 1677715 (224−1) بايت = 16 ميجابايت 
 LONGTEXT | 4،294،967،295 (232−1) بايت = 4 غيغابايت 

لاحظ أن عدد الأحرف التي يمكن تخزينها في العمود الخاص بك سوف يعتمد على ترميز الأحرف .

1387
Bridge

توسيع الجواب نفسه

  1. هذا SO post: varchar (255) مقابل tinytext/tinyblob و varchar (65535) مقابل blob/text يحدد بالتفصيل النفقات العامة وآليات التخزين.
  2. كما هو موضح من النقطة (1) ، يجب دائمًا استخدام VARCHAR بدلاً من TINYTEXT. ومع ذلك ، عند استخدام VARCHAR ، يجب ألا يتجاوز حجم الصفوف القصوى 65535 بايت.
  3. كما هو موضح هنا http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-utf8.html ، بحد أقصى 3 بايت ل utf-8.

هذا IS تقدير صارم لجداول سريعة!

  1. لذا فإن أسوأ افتراضات الحالة (3 بايت لكل utf-8 char) هي أفضل حالة (1 بايت لكل utf-8 char)
  2. على افتراض أن اللغة الإنجليزية بها 4.5 حرف في المتوسط ​​لكل كلمة
  3. x هو عدد البايتات المخصصة

س-س

      Type | A= worst case (x/3) | B = best case (x) | words estimate (A/4.5) - (B/4.5)
-----------+---------------------------------------------------------------------------
  TINYTEXT |              85     | 255               | 18 - 56
      TEXT |           21845     | 65,535            | 4854.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

221
Ankan-Zerob

بالارتقاء إلى مستوى @ 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 حرفًا ، بأحرف متعددة البايت في بعض الأحيان ، قريبة جدًا من بايت واحد لكل حرف. يجب السماح بحرف إضافي لمسافات inter-Word ، لذلك قمت بالتنقيط لأسفل من 5.8 بايت لكل كلمة. اللغات التي تحتوي على الكثير من لهجات مثل say البولندية ستخزن كلمات أقل قليلاً ، مثل: الألمانية مع الكلمات أطول.

تتطلب اللغات التي تتطلب multi-byte أحرف مثل اليونانية والعربية والعبرية والهندية والتايلاندية وغيرها ، عادةً وحدتي بايت لكل حرف في UTF-8. تخمين بعنف في 5 أحرف لكل كلمة ، لقد تقريب من 11 بايت لكل كلمة.

مخطوطات CJK (هانزي ، كانجي ، هيراغانا ، كاتاكانا ، إلخ) لا أعرف شيئًا ؛ أعتقد أن الأحرف تتطلب غالبًا 3 بايتات في UTF-8 ، و (مع تبسيط هائل) يمكن اعتبارها تستخدم حوالي 2 حرفًا لكل كلمة ، لذلك ستكون في مكان ما بين الاثنين الأخريين. (من المحتمل أن تتطلب البرامج النصية CJK مساحة تخزينية أقل باستخدام UTF-16 ، وفقًا).

هذا بالطبع يتجاهل النفقات العامة للتخزين وما إلى ذلك.

36
ChrisV

هذا جميل لكن لا يجيب على السؤال:

"يجب دائمًا استخدام VARCHAR بدلاً من TINYTEXT." Tinytext مفيد إذا كان لديك صفوف واسعة - حيث يتم تخزين البيانات خارج السجل. يوجد حمل أداء ، لكن له استخدام.

6
colin0117