TINYTEXT, টেক্সট, মিডিয়ামটেক্সট এবং লংটেক্সট সর্বাধিক স্টোরেজ আকার


796

প্রতি মাইএসকিউএল ডক্স , সেখানে চার টেক্সট ধরনের হয়:

  1. TINYTEXT
  2. টেক্সট
  3. MEDIUMTEXT
  4. LONGTEXT

অক্ষরের এনকোডিংটি ইউটিএফ -8 ধরে ধরে আমি প্রতিটি তথ্য টাইপের কলামে সর্বাধিক দৈর্ঘ্যটি কী পরিমাণে সঞ্চয় করতে পারি?


26
উদাহরণস্বরূপ পাঠ্য প্রকারটি ধরুন। এটিতে 65535 বাইট ডেটা থাকতে পারে । ইউটিএফ -8 এ মাল্টি-বাইট অক্ষর রয়েছে। অতএব, আপনি যদি কেবলমাত্র ডেনিশ অক্ষর "Ø" ব্যবহার করে ক্ষেত্রটি পূরণ করেন তবে আপনি কেবল 32767 টি অক্ষর পাবেন কারণ ইউটিএফ -8 অক্ষরটি দুটি বাইট দ্বারা গঠিত। আপনি "এ" দিয়ে এটি পূরণ করলে আপনি 65535 টি অক্ষর পাবেন।
অ্যান্ড্রু প্ল্যাঙ্ক

উত্তর:


1517

ডকুমেন্টেশন থেকে :

      প্রকার | সর্বোচ্চ দর্ঘ্য
----------- + + -------------------------------------
  টিনটাইটস | 255 (2 8 −1) বাইট
      পাঠ্য | 65,535 (2 16 −1) বাইট = 64 কিবি
মিডিয়ামটেক্সট | 16,777,215 (2 24 −1) বাইট = 16 এমআইবি
  লংটেক্সট | 4,294,967,295 (2 32 −1) বাইট = 4 জিআইবি

নোট করুন যে আপনার কলামে অক্ষরগুলির সংখ্যা সংরক্ষণ করা যাবে তা অক্ষর এনকোডিংয়ের উপর নির্ভর করবে ।


3
@ ব্রিজ নিশ্চিত যে আমি বুঝতে পেরেছি না, তবে এর অর্থ এই যে TINYTEXT 255 টির বেশি অক্ষর পেতে পারে, আমি ঠিক ???
এলটিদেব

9
@ লাইকোস হ্যাঁ, ভাল - চরিত্রগুলির উপর নির্ভর করে। ডকুমেন্টেশন থেকে: 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.আরও বিস্তারিত জানার জন্য অঙ্কানের উত্তর দেখুন।
সেতু

4
@ অরেল.g.g আপনি সত্যিই প্রশ্নের উত্তর। এবং আমি ক্রিস্টোফের সাথে একমত, এইভাবে মাইএসকিউএলকে তার পরামিতিগুলি উপস্থাপন করা উচিত - এমনকি যদি তাদের ... আরকেন পাঠ্য দর্শনে পরিপূরক শর্টহ্যান্ড হিসাবে দেখা যায়।
cbmtrx

1
এটি যোগ করার মতো হতে পারে যে কোনও চরিত্রের দৈর্ঘ্যের ক্রমটি কয়েকটা বাইট (কমপক্ষে 1 আমি মনে করি) is সুতরাং কেউ একটি পাঠ্য কলামে 10,000-50,000 অক্ষর সংরক্ষণ করতে পারে, ...
ভিন্স


245

একই উত্তরের প্রসারণ

  1. এই এসও পোস্টে ওভারহেড এবং স্টোরেজ প্রক্রিয়াগুলির বিশদরেখা রূপরেখা দেয়।
  2. বিন্দু (1) থেকে উল্লিখিত হিসাবে, একটি ভ্রচারটি সর্বদা TINYTEXT এর পরিবর্তে ব্যবহার করা উচিত। যাইহোক, VARCHAR ব্যবহার করার সময়, সর্বাধিক সারিটি 65535 বাইট অতিক্রম করা উচিত নয়।
  3. এখানে উল্লিখিত হিসাবে http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-utf8.html , utf-8 এর জন্য সর্বোচ্চ 3 বাইট।

এটি তাত্ক্ষণিক সিদ্ধান্তের জন্য একটি কঠিন প্রতিষ্ঠানের টেবিলে!

  1. সুতরাং সবচেয়ে খারাপ ক্ষেত্রে অনুমান (সর্বোত্তম ক্ষেত্রে প্রতি বাইট 3 প্রতি বাইট) (প্রতি ইউএফ -8 চার প্রতি 1 বাইট)
  2. ধরে নিই ইংরেজি ভাষার প্রতি শব্দ হিসাবে গড়ে ৪.৫ অক্ষর রয়েছে
  3. এক্স বরাদ্দ করা বাইট সংখ্যা

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

দয়া করে ক্রিস ভি এর উত্তরও দেখুন: https://stackoverflow.com/a/35785869/1881812


4
এই "TINYTEXT এর পরিবর্তে সর্বদা ব্যবহার করা উচিত" এর যৌক্তিকতা কী? কখনও কখনও ছোট TINYTEXT ব্যবহার করা কি ভাল (বেশি স্টোরেজ দক্ষ) হতে পারে না?
ভ্লাসিট করে

24
@ প্লাসিটগুলি বিশদ সম্পর্কিত অন্তর্ভুক্ত এসও পোস্ট পড়ুন। (1) টিনিটেক্সট সহ সমস্ত পাঠ্য প্রকারগুলি সারির বাইরে বস্তু হিসাবে সংরক্ষণ করা হয় যা একটি ওভারহেড (2) এই বিষয়গুলি পরে 8 বা 16 বাইটের ঠিকানা দ্বারা রেফারেন্স করা হয়। সুতরাং আপনার ক্ষুদ্রতম পাঠটি যতই ক্ষুদ্র হোক না কেন, আপনি অপ্রয়োজনীয় ওভারহেড যুক্ত করছেন, এটিও সর্বোচ্চ 255 বাইটের আকারের জন্য। এটি স্পষ্ট যে বার্চারটি ব্যবহার করা উচিত, যার উপরের ওভারহেডগুলির কোনওটি নেই।
অঙ্কন-জেরব

4
@ আঙ্কন-জেরোব প্রদত্ত যে এটি খুব স্পষ্টভাবে প্রতীয়মান হয়েছে যে টুয়েন্টিঅ্যাক্সটিক্টটি কখনও ভ্রচারে ব্যবহার করা উচিত নয়, এটি বিকল্প হিসাবে থাকার পক্ষে যুক্তি কী? এটি প্রয়োজনীয় যেখানে কিছু অস্পষ্ট ব্যবহারের ক্ষেত্রে আছে?
পরেরজনটেক 25'15

4
@ এনেক্সটজেনটেক এ দেখুন dev.mysql.com/doc/refman/5.0/en/column-count-limit.html । একটি রেকর্ড আকার 64 কিবি সীমাবদ্ধ। একটি টেবিল 4k কলামে সীমাবদ্ধ। একজন TINYTEXTগন্য 1 বাইট + 8 থেকে রেকর্ড আকার বিরুদ্ধে বাইট, যেহেতু একটি VARCHAR(255)1 বাইট + + 255 বাইট আপ থেকে 2 বাইট + + 1020 বাইট (4 বাইট হল UTF-8 টি অক্ষর) রেকর্ড আকার বিরুদ্ধে করা গন্য।
শি

2
আমি শব্দের সাথে ক্ষেত্রের আকারগুলি প্রকাশ করতে পছন্দ করি তবে ... সাধারণত ইংরেজি প্রতি শব্দ প্রতি 5 টির মতো অক্ষর থাকে বলে মনে করা হয়, এবং সংরক্ষণ করার জন্য একটি স্পেস অক্ষরও রয়েছে; তবে, ইউটিএফ -8 চরিত্র অনুযায়ী ইংরেজি সর্বদা 1 বাইটের কাছাকাছি থাকবে, সুতরাং আমি বিভিন্ন আকারের জন্য প্রায় 40 / 10,000 / 2,700,000 / 710,000,000 শব্দ দিয়ে 6 দিয়ে ভাগ করব। পোলিশের মতো প্রচুর উচ্চারণ সহ ভাষাগুলিতে কিছুটা কম শব্দ থাকবে; গ্রীক, হিব্রু, আরবী ইত্যাদি (প্রায় 2-বাইট ক্রম সহ) প্রায় অর্ধেক; সিজেকে আইডোগ্রাফগুলি 3 বা 4-বাইট সিকোয়েন্সগুলি হয় তবে শব্দগুলি কত দীর্ঘ তা আমি জানি না।
ক্রিসভি

44

@ অঙ্কন-জেরোবের চ্যালেঞ্জের উত্থানে, এটি আমার সর্বাধিক দৈর্ঘ্যের অনুমান যা শব্দগুলিতে পরিমাপ করা প্রতিটি পাঠ্য টাইপের মধ্যে সংরক্ষণ করা যেতে পারে :

      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 বাইট থেকে গোল করে এসেছি। প্রচুর উচ্চারণ সহ ভাষা যেমন পোলিশ বলতে কিছুটা কম শব্দ সঞ্চয় করে, যেমন দীর্ঘতর শব্দ সহ জার্মান would

গ্রীক, আরবি, হিব্রু, হিন্দি, থাই, ইত্যাদির মতো বহু-বাইটের অক্ষরের জন্য প্রয়োজনীয় ভাষার জন্য সাধারণত ইউটিএফ -8-তে প্রতিটি চরিত্রের জন্য দুটি বাইটের প্রয়োজন হয়। প্রতি শব্দ প্রতি 5 টি বর্ণের বুনিয়াদ অনুমান করে, আমি প্রতি শব্দ 11 বাইট থেকে নীচে পেয়েছি।

সিজেকে স্ক্রিপ্টস (হানজি, কঞ্জি, হীরাগানা, কাটাকানা ইত্যাদি) আমি এর কিছুই জানি না; আমি বিশ্বাস করি অক্ষরগুলির বেশিরভাগ ইউটিএফ -8 এ 3 বাইটের প্রয়োজন হয়, এবং (বিশাল সরলকরণের সাথে) তারা প্রতি শব্দে প্রায় 2 টি অক্ষর ব্যবহার করার জন্য বিবেচিত হতে পারে, তাই তারা অন্য দুটির মধ্যে কোথাও থাকবে। (সিজেকে স্ক্রিপ্টগুলির উপর নির্ভর করে ইউটিএফ -16 ব্যবহার করে কম স্টোরেজের প্রয়োজন হতে পারে)।

এটি অবশ্যই স্টোরেজ ওভারহেড ইত্যাদি উপেক্ষা করছে etc.


সিজেকে চরিত্রগুলি 3 বা 4 বাইট ক্রম ব্যবহার করতে পারে: dev.mysql.com/doc/refman/5.7/en/charset-unicode-utf8.html
র‌্যাপ্টর

8

এটি দুর্দান্ত তবে প্রশ্নের উত্তর দেয় না:

"TINYTEXT এর পরিবর্তে সর্বদা একটি VARCHAR ব্যবহার করা উচিত" " Tinytext দরকারী যদি আপনার প্রশস্ত সারি থাকে - যেহেতু ডেটা রেকর্ডের বাইরে সঞ্চিত থাকে। ওভারহেডের পারফরম্যান্স রয়েছে তবে এর ব্যবহার রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.