মাইএসকিউএল ভারচরার সর্বোচ্চ আকারটি কী?


300

আমি জানতে চাই যে মাইএসকিউএল ভর্কআচার টাইপের জন্য সর্বোচ্চ আকারটি কী size

আমি পড়েছি যে সর্বাধিক আকারটি সারি আকারের দ্বারা সীমাবদ্ধ যা প্রায় 65k। আমি ক্ষেত্রটি স্থাপনের চেষ্টা করেছি varchar(20000)তবে এটি বলছে যে এটি খুব বড়।

আমি এটি সেট করতে পারে varchar(10000)। আমি এটি সেট করতে পারি ঠিক কি?


1
একটি বিশদ ব্লগ: goo.gl/Hli6G3
সুরেশ কামরুশী

উত্তর:


293

মনে রাখবেন যে মাইএসকিউএল সর্বাধিক সারি আকারের সীমা রয়েছে

কোনও মাইএসকিউএল টেবিলের অভ্যন্তরীণ উপস্থাপনায় সর্বাধিক সারি আকারের সীমা সীমা 65,535 বাইট রয়েছে, বিএলওবি এবং পাঠ্য প্রকারের গণনা নেই। বিএলওবি এবং টেক্সট কলামগুলি সারি আকারের সীমাতে 9 থেকে 12 বাইট অবদান রাখে কারণ তাদের বিষয়বস্তুগুলি সারির বাকী অংশ থেকে পৃথকভাবে সঞ্চিত থাকে। সারণী কলাম গণনা এবং সারি আকারের সীমা সম্পর্কে আরও পড়ুন

একক কলাম সর্বাধিক আকার ধারণ করতে পারে, এটি মাইএসকিউএল 5.0.3 এর আগে ও পরে পৃথক

VARCHAR কলামের মানগুলি পরিবর্তনশীল-দৈর্ঘ্যের স্ট্রিং। দৈর্ঘ্যটি মাইএসকিউএল 5.0.3 এর আগে 0 থেকে 255 এবং 5.0.3 এবং পরবর্তী সংস্করণগুলিতে 0 থেকে 65,535 পর্যন্ত মান হিসাবে নির্দিষ্ট করা যেতে পারে । মাইএসকিউএল 5.0.3 এ একটি ভ্রচারের কার্যকর সর্বোচ্চ দৈর্ঘ্য এবং পরে সর্বাধিক সারি আকার (65,535 বাইট, যা সমস্ত কলামের মধ্যে ভাগ করা হয়) এবং ব্যবহৃত অক্ষর সেট সাপেক্ষে।

তবে নোট করুন যে আপনি যদি utf8 বা utf8mb4 এর মতো মাল্টি-বাইট অক্ষর সেট ব্যবহার করেন তবে সীমাটি কম।

TEXTসারি আকারের সীমাটি অতিক্রম করতে প্রকারের ইনর্ডার ব্যবহার করুন ।

চারটি পাঠ্য প্রকারগুলি হ'ল TINYTEXT, পাঠ্য, মিডিয়ামটেক্সট এবং লংটেক্সট। এগুলি চারটি বিএলওবি ধরণের সাথে সামঞ্জস্যপূর্ণ এবং একই সর্বোচ্চ দৈর্ঘ্য এবং স্টোরেজ প্রয়োজনীয়তা রয়েছে।

BLOB এবং পাঠ্য প্রকারের আরও বিশদ

আরও বেশি

ডেটা টাইপ স্টোরেজ প্রয়োজনীয়তার উপর আরও বিশদটি চেকআউট করুন যা সমস্ত ডেটা ধরণের স্টোরেজ প্রয়োজনীয়তা নিয়ে কাজ করে।


4
একটি "দীর্ঘ" স্ট্রিং কি?
রিচার্ড এইচ

6
আমি পাঠ্য কলামগুলি এড়াতে চেষ্টা করি যদিও তারা উপস্থিত এবং বাছাই করার সময় টেম্প টেবিল তৈরি করতে পারে
রবার্ট সুইশার

1
আমি যদি প্রথম নামের জন্য ভারচর (200) নিই এবং আমি এই ক্ষেত্রের মধ্যে কেবল 6 টি চর সংরক্ষণ করি তবে কত বাইট প্রথম নামটি দখল করা হবে?
পরেশ গামি

2
@ পরেশগামী - 6 + 1 = 7 টি অক্ষর! CHAR এর বিপরীতে, VARCHAR মানগুলি 1-বাইট বা 2-বাইট দৈর্ঘ্যের উপসর্গ প্লাস ডেটা হিসাবে সংরক্ষণ করা হয়। আরও ...
rajukoyilandy

58

অনুযায়ী অনলাইন ডক্স , একটি 64K সারি সীমা এবং আপনি ব্যবহার করে সারি আকার আউট কাজ করতে পারেন:

row length = 1
             + (sum of column lengths)
             + (number of NULL columns + delete_flag + 7)/8
             + (number of variable-length columns)

আপনার মনে রাখতে হবে যে কলামের দৈর্ঘ্য তাদের আকারের এক থেকে এক ম্যাপিং নয়। উদাহরণস্বরূপ, CHAR(10) CHARACTER SET utf8দশটি অক্ষরের প্রত্যেকটির জন্য তিনটি বাইটের প্রয়োজন কারণ যে নির্দিষ্ট এনকোডিংয়ের জন্য তিন-বাইট-প্রতি-চরিত্রের সম্পত্তি utf8(এটি মাইএসকিউএল'রutf8 "রিয়েল" ইউটিএফ -8 এর পরিবর্তে এনকোডিং রয়েছে , যার চারটি পর্যন্ত বাইট থাকতে পারে )।

তবে, যদি আপনার সারির আকার K৪ কে কাছে পৌঁছে যায়, আপনি আপনার ডাটাবেসের স্কিমা পরীক্ষা করতে চাইতে পারেন। এটি একটি বিরল টেবিল যা সঠিকভাবে সেট আপ (3NF) ডাটাবেসে বিস্তৃত হওয়া দরকার - এটি সম্ভব, কেবল খুব সাধারণ নয়।

আপনি যদি এর চেয়ে বেশি ব্যবহার করতে চান তবে আপনি BLOBবা ব্যবহার করতে পারেনTEXT প্রকারগুলি । এগুলি সারিটির 64 কে সীমা (একটি ছোট প্রশাসনিক পদচিহ্ন ব্যতীত) গণনা করে না তবে তাদের ব্যবহার থেকে আসা অন্যান্য সমস্যা সম্পর্কে আপনার সচেতন হওয়া দরকার যেমন একটি নির্দিষ্ট সংখ্যার বাইরে পুরো পাঠ্য ব্লকটি ব্যবহার করে বাছাই করতে না পারা as অক্ষরের (যদিও এটি উপরের দিকে কনফিগার করা যেতে পারে), অস্থায়ী টেবিলগুলিকে মেমরির চেয়ে ডিস্কে থাকতে বাধ্য করে বা ক্লায়েন্ট এবং সার্ভার কমস বাফারগুলি মাপগুলি দক্ষতার সাথে পরিচালনা করতে কনফিগার করে।

অনুমোদিত মাপগুলি হ'ল:

TINYTEXT          255 (+1 byte  overhead)
TEXT          64K - 1 (+2 bytes overhead)
MEDIUMTEXT    16M - 1 (+3 bytes overhead)
LONGTEXT      4G  - 1 (+4 bytes overhead)

আপনার কাছে এখনও বাইট / চরিত্রের মিল নেই (যাতে কোনও MEDIUMTEXT utf8কলামটি "শুধুমাত্র" প্রায় অর্ধ মিলিয়ন অক্ষর সংরক্ষণ করতে পারে (16M-1)/3 = 5,592,405) তবে এটি এখনও আপনার পরিসরকে প্রসারিত করে।


4
মনে রাখবেন যে টেক্সট প্রকারগুলি মেমরি টেবিলগুলিতে সংরক্ষণ করতে সক্ষম নয়, সুতরাং যখন কোনও ভিউচারার যথেষ্ট হবে তখন তাদের ব্যবহারের জন্য একটি উল্লেখযোগ্য পারফরম্যান্স পেনাল্টি রয়েছে।
ক্যামডেন এস

এর 'তিন বাইট প্রতি চরিত্র UTF8 সম্পত্তি' মাইএসকিউএল UTF8 , যা সব সময়ে UTF8 আসলে নয়। বাস্তবে সর্বাধিক বাইট একটি UTF-8 গৃহস্থালির কাজ মধ্যে হয় 4 । এই কারণে আপনার সর্বদা মাইএসকিউএলে এনকোডিংটি সেট করাutf8mb4 উচিত । utf8mb4বাক্যটি কীভাবে utf8 ডাকে মাইএসকিএল এর নাম।
স্টিজন ডি উইট

1
@ স্টিজেডেভিট, তার জন্য ধন্যবাদ আমি ইউটিএফ -8 এর চেয়ে মাইএসকিউএল এর ইউটিএফ 8 এনকোডিং পদ্ধতিটি বোঝানোর জন্য স্পষ্ট করে বললাম। আমি সাধারণত "আসল" ইউটিএফ -8 নির্দেশ করতে মূলধনযুক্ত রূপটি ব্যবহার করি কারণ এটি অনুমোদিত আইএএনএ কনভেনশন।
paxdiablo

41

সূত্র

ভারচরের সর্বোচ্চ দৈর্ঘ্য মাইএসকিউএলে সর্বাধিক সারি আকারের সাপেক্ষে, যা 64KB (বিএলওবি গণনা করছে না):

VARCHAR (65535) তবে মনে রাখবেন যে আপনি যদি মাল্টি-বাইট অক্ষর সেট ব্যবহার করেন তবে সীমাটি কম থাকবে:

VARCHAR (21844) চরিত্র সেট utf8


20
উদাহরণস্বরূপ ব্যবহার বন্ধ করুন CHARACTER SET utf8। এটি হওয়া উচিত CHARACTER SET utf8mb4(আপনি যদি সমস্ত ইউনিকোড পাঠ্যটি সঠিকভাবে সংরক্ষণ করতে চান ... এবং কে তা চায় না?)
স্টিজন ডি উইট

4
জন্য CHARSET=utf8mb4ব্যবহার VARCHAR(16383)
উইল মুর তৃতীয়

3
Utf8mb4 ব্যবহার আপনাকে সূচক প্রস্থের সীমাটির বিপরীতে এমন পরিস্থিতিতে ফেলবে যেখানে utf8 না করে। আপনি যদি utf8mb4 তে অন্তর্ভুক্ত কিন্তু ইউটিএফ 8-তে অন্তর্ভুক্ত নয় এমন চরিত্রের সেটগুলি পরীক্ষা করেন তবে আপনি দেখতে পাবেন যে হায়ারোগ্লিফিক্সের বিভিন্ন ধরণের এবং অন্যান্য অন্যান্য তীরচিহ্নের অক্ষর সেটগুলি অন্তর্ভুক্ত করে গুরুত্বপূর্ণ পারফরম্যান্স পেনাল্টির জন্য মূল্যবান নয় (অভিজ্ঞতায় নির্ধারিত)। এটি স্টিজন দ্বারা বোঝা যায় ঠিক তেমন কাটা এবং শুকানো নয়।
kcrossen

অনেক ইমোজিগুলি utf8mb4 এ উপস্থিত থাকে এবং utf8 থেকে হারিয়ে যায়, যাতে এটি কার্যকর হয় কিনা এর সমীকরণটি পরিবর্তন করতে পারে।
ব্রায়ান মোরের্টি

23

মাইএসকিউএল ডকুমেন্টেশন থেকে:

মাইএসকিউএল 5.0.3 এ একটি ভ্রচারের কার্যকর সর্বোচ্চ দৈর্ঘ্য এবং পরে সর্বাধিক সারি আকারের (65,535 বাইট, যা সমস্ত কলামের মধ্যে ভাগ করা হয়) এবং ব্যবহৃত অক্ষর সেট সাপেক্ষে। উদাহরণস্বরূপ, utf8 টি অক্ষরের জন্য প্রতিটি চরিত্রের জন্য তিনটি বাইটের প্রয়োজন হতে পারে, সুতরাং utt8 অক্ষর সেটটি ব্যবহার করে এমন একটি VARCHAR কলাম সর্বোচ্চ 21,844 অক্ষর হিসাবে ঘোষিত হতে পারে।

বর্ণচর্চার সীমাবদ্ধতা ব্যবহৃত চারসেটের উপর নির্ভর করে পরিবর্তিত হয়। ASCII ব্যবহার করে প্রতিটি চরিত্রের জন্য 1 বাইট ব্যবহার করা হবে। মানে আপনি 65,535 টি অক্ষর সংরক্ষণ করতে পারেন। ইউটিএফ 8 ব্যবহার করে অক্ষর প্রতি 3 বাইট ব্যবহার করা হবে যার ফলশ্রুতি 21,844 character তবে আপনি যদি আধুনিক মাল্টিবাইট চরসেট utf8mb4 ব্যবহার করেন যা আপনার ব্যবহার করা উচিত! এটি ইমোজি এবং অন্যান্য বিশেষ চরিত্রগুলিকে সমর্থন করে। এটি চরিত্র অনুসারে 4 বাইট ব্যবহার করবে। এটি প্রতি টেবিলের মধ্যে অক্ষরের সংখ্যা 16,383-এ সীমাবদ্ধ করবে। নোট করুন যে অন্যান্য ক্ষেত্র যেমন আইএনটিও এই সীমাতে গণনা করা হবে।

উপসংহার:

সর্বোচ্চ 21,844 অক্ষর utf8

utf8mb4 সর্বোচ্চ 16,383 টি অক্ষর


6

আপনি মিডিয়ামব্লব / লংব্লব বা মিডিয়ামটেক্সট / লংটেক্সটও ব্যবহার করতে পারেন

মাইএসকিউএল-এ একটি বিএলওবি টাইপ 65,534 বাইট পর্যন্ত সঞ্চয় করতে পারে, আপনি যদি এই পরিমাণে বেশি ডেটা সংরক্ষণ করার চেষ্টা করেন তবে মাইএসকিউএল ডেটা কেটে ফেলবে। মিডিলম্বব 16,777,213 বাইট পর্যন্ত সঞ্চয় করতে পারে এবং লংব্লব 4,294,967,292 বাইট পর্যন্ত সঞ্চয় করতে পারে।


3

মাইএসকিএল সংস্করণ 5.0.3 এর আগে বর্ণচর ডেটাটাইপ 255 অক্ষর সংরক্ষণ করতে পারে তবে 5.0.3 থেকে এটি 65,535 অক্ষর সংরক্ষণ করতে পারে।

তবে এটির সর্বোচ্চ সারি আকারের 65,535 বাইটের সীমাবদ্ধতা রয়েছে। এর অর্থ এটি সমস্ত কলাম সহ এটি 65,535 বাইটের বেশি হওয়া উচিত নয়।

আপনার ক্ষেত্রে এটি সম্ভব হতে পারে যে আপনি যখন 10000 এর বেশি সেট করার চেষ্টা করছেন এটি 65,535 এরও বেশি হয়ে গেছে এবং মাইএসকিএল ত্রুটি দেয়।

আরও তথ্যের জন্য: https://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html

উদাহরণ সহ ব্লগ: http://goo.gl/Hli6G3


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