মাইএসকিউএল-তে ভারচারের (সর্বোচ্চ) সমান?


উত্তর:


195

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

VARCHAR(65535)

তবে নোট করুন যে আপনি যদি বহু-বাইট অক্ষর সেট ব্যবহার করেন তবে সীমাটি কম থাকবে:

VARCHAR(21844) CHARACTER SET utf8

এখানে কিছু উদাহরন:

সর্বাধিক সারির আকার 65535, তবে একটি বার্চারে প্রদত্ত স্ট্রিংয়ের দৈর্ঘ্য এনকোড করার জন্য একটি বাইট বা দুটিও অন্তর্ভুক্ত থাকে। সুতরাং আপনি সর্বাধিক সারি আকারের বার্চারটি ঘোষণা করতে পারবেন না, এমনকি এটি সারণীতে একমাত্র কলামও রয়েছে।

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)

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

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

শেষ ত্রুটিটি আমাদের যা বলেছিল সত্ত্বেও, ইনোডিবি এখনও 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)

20
আমি TEXT
আদি

2
@ অ্যাডান্নশামাউট: অবশ্যই, আপনি যদি DEFAULTনা কলামটির জন্য কোনও মান ঘোষণা করতে চান । পাঠ্য বা বিএলওবি প্রকারের মাধ্যমে তা করতে পারে না।
বিল কারভিন

5
@ ড্যানডাব্লু, TEXTদৈর্ঘ্যের সীমা K৪ কে। MEDIUMTEXTদৈর্ঘ্যের সীমা 16M। LONGTEXTদৈর্ঘ্যের সীমা 4G।
বিল কারভিন

4
এর সাথে সবচেয়ে বড় সমস্যাটি হ'ল আপনি যদি সেই আকারের একটি কলাম তৈরি করেন তবে আপনার টেবিলে কেবল একটি কলাম থাকতে পারে । MAX টি মাইএসকিউএল মধ্যে সারি আকার 64K, তাই যদি আপনি একটি 64K কলাম আছে, তোমার পাওনা যে। এই একই বাধা স্কেল সার্ভারের varchar(max)কলামের ধরণের ক্ষেত্রে প্রযোজ্য নয় ।
জোশপুরি

1
@ জোশ্প্পেরি, হ্যাঁ তবে পাঠ্য / বিএলওবি কলামগুলি সেই row৪ কেবি সারি আকারের সীমাতে কেবলমাত্র একটি অল্প পরিমাণে (৯-১২ বাইট) গণনা করেছে, সুতরাং আপনার যদি একটি বৃহত্তর ভ্রচারের পাশাপাশি বেশ কয়েকটি অন্যান্য কলামের প্রয়োজন হয় তবে এটি TEXT ব্যবহার করা ভাল।
বিল কারভিন

74

TLDR; মাইএসকিউএলের সমতুল্য ধারণা নেই varchar(max), এটি একটি এমএস এসকিউএল সার্ভার বৈশিষ্ট্য।

ভর্চার (সর্বোচ্চ) কী?

varchar(max) মাইক্রোসফ্ট এসকিউএল সার্ভারের একটি বৈশিষ্ট্য।

মাইক্রোসফ্ট এসকিউএল সার্ভার সংস্করণে ২০০৫ এর সংস্করণের পূর্বে কোনও কলাম সংরক্ষণ করতে পারে এমন পরিমাণের পরিমাণ 8KB এর মধ্যে সীমাবদ্ধ ছিল। অর্ডার 8KB চেয়ে বেশি সঞ্চয় করতে আপনি ব্যবহার করতে হবে TEXT, NTEXTঅথবা BLOBকলাম ধরনের, এই কলামের ধরনের 8K পৃষ্ঠাগুলির একটি সংগ্রহ হিসাবে তাদের তথ্য সংরক্ষণ করা টেবিলের তথ্য পেজ থেকে আলাদা; তারা প্রতি সারি 2GB অবধি স্টোরেজ সমর্থন করে।

এই কলাম ধরনের বড় সতর্কীকরণ ছিল যে তারা সাধারণত অ্যাক্সেস করতে বিশেষ ফাংশন এবং বিবৃতি প্রয়োজন এবং ডেটা সংশোধন (যেমন READTEXT, WRITETEXTএবং UPDATETEXT)

এসকিউএল সার্ভার 2005-এ, varchar(max)বৃহত্তর কলামগুলিতে ডেটা পুনরুদ্ধার এবং সংশোধন করতে ব্যবহৃত ডেটা এবং কোয়েরিগুলিকে একীকরণের জন্য প্রবর্তিত হয়েছিল। জন্য তথ্য varchar(max)কলাম টেবিল তথ্য পৃষ্ঠাগুলির সাথে ইনলাইন সংরক্ষণ করা হয়।

যেমন MAX কলামে ডেটা একটি 8 কেবি ডেটা পৃষ্ঠা পূরণ করে একটি ওভারফ্লো পৃষ্ঠা বরাদ্দ করা হয় এবং পূর্ববর্তী পৃষ্ঠাটি এতে লিঙ্কযুক্ত তালিকা গঠন করে। ভিন্ন TEXT, NTEXTএবং কলামের ধরণ সব অন্যান্য কলাম ধরনের হিসাবে একই ক্যোয়ারী শব্দার্থবিদ্যা সমর্থন করে।BLOBvarchar(max)

তাই varchar(MAX)সত্যিই মানে varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING)এবং varchar(MAX_SIZE_OF_A_COLUMN)

মাইএসকিউএল এর সমতুল্য প্রবাদ নেই।

varchar(max)মাইএসকিউএল হিসাবে একই পরিমাণে স্টোরেজ পেতে আপনার এখনও একটি BLOBকলামের ধরণের অবলম্বন করতে হবে । এই নিবন্ধটি মাইএসকিএলে প্রচুর পরিমাণে ডেটা দক্ষতার সাথে সঞ্চয় করার একটি খুব কার্যকর পদ্ধতি নিয়ে আলোচনা করেছে।


1
এটি মাইএসকিউএল এর চেয়ে এসকিউএল সার্ভারের সাথে আরও অনেক কিছু করতে পারে।
কেরমিট

14
@ এনজেকি হ্যাঁ, তবে মাইএসকিএলে "সমতুল্য" (বা এক্ষেত্রে সমমানের অভাব) কী দরকার varchar(max) তা বোঝাতে হলে আসলে কী বোঝায়।
joshperry

29

একটি ভারচারের সর্বোচ্চ দৈর্ঘ্য

65535

অক্ষরের সেটটিতে অক্ষরের সর্বোচ্চ বাইট দৈর্ঘ্য দ্বারা বিভক্ত কলামটি সেট করা হয়েছে (উদাঃ utf8 = 3 বাইট, ucs2 = 2, লাতিন 1 = 1)।

দৈর্ঘ্য সঞ্চয় করতে বিয়োগ 2 বাইট

অন্যান্য সমস্ত কলামের দৈর্ঘ্য বিয়োগ করুন

বিয়োগযোগ্য প্রতি 8 টি কলামের জন্য বিয়োগ 1 বাইট। যদি আপনার কলামটি নাল / নাল না থাকে তবে এটি নাইট মাস্ক নামে একটি বাইট / বাইটে এক বিট হিসাবে সঞ্চিত হয়ে যায়, কলাম প্রতি 1 বিট যে নল হয়।


আমি আপনার উত্তরের ফর্ম্যাটটি পছন্দ করি তবে মনে হচ্ছে এটি দরকারী কিছু তথ্য হারিয়েছে যা শীর্ষ উত্তরটি অক্ষর এবং স্টাফ্ট সম্পর্কিত সরবরাহ করে
জো ফিলিপস

3

SQL সার্ভারের জন্য

টেবিলের পরিবর্তন করুন

মাইএসকিউএল এর জন্য

টেবিল পরিবর্তন করুন

ওরাকল এর জন্য

টেবিল পরিবর্তন করুন


1
নোট করুন যে লম্বা পাঠ্য, পাঠ্য এবং ব্লব বর্ণের চেয়ে আলাদাভাবে সংরক্ষণ করা হয়েছে। বার্চার অন্যান্য ক্ষেত্রের সাথে সংরক্ষণ করা হয়, যখন পাঠ্যটি সার্ভারে একটি পৃথক ফাইলে সংরক্ষণ করা হয়। এটির পক্ষে ভাল
মতামত রয়েছে

0

সীমা আকারের অধীনে যখন মাইএসকিএল রূপান্তরকারী কলামটি ভ্রচার থেকে টেক্সটে রূপান্তর করা হচ্ছে !!!

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>

-11

মাইএসকিউএল 5.6.12 এ বর্ণের সর্বোচ্চ দৈর্ঘ্য 4294967295।

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