মাইএসকিউএল - দৈর্ঘ্য () বনাম চর_ দৈর্ঘ্য ()


215

মধ্যে মূল পার্থক্য কি length()এবং char_length()?

আমি বিশ্বাস করি এটি বাইনারি এবং নন-বাইনারি স্ট্রিংগুলির সাথে কিছু করার আছে। বাইনারি হিসাবে স্ট্রিংগুলি সংরক্ষণ করার কোনও বাস্তব কারণ আছে?

mysql> select length('MySQL'), char_length('MySQL');
+-----------------+----------------------+
| length('MySQL') | char_length('MySQL') |
+-----------------+----------------------+
|               5 |                    5 |
+-----------------+----------------------+
1 row in set (0.01 sec)

2
হ্যাঁ, বাইনারি স্ট্রিংগুলি আসলে বাইনারি স্ট্রিংগুলি রাখার জন্য ব্যবহারিক কারণ রয়েছে, যেমন সংকুচিত।
সানমাই

উত্তর:


351

LENGTH()বাইটে পরিমাপ করা স্ট্রিংয়ের দৈর্ঘ্য প্রদান করে । অক্ষরে পরিমাপ করা স্ট্রিংয়ের
CHAR_LENGTH() দৈর্ঘ্য প্রদান করে ।

এটি ইউনিকোডের জন্য বিশেষত প্রাসঙ্গিক, যেখানে বেশিরভাগ অক্ষর দুটি বাইটে এনকোড করা থাকে। বা ইউটিএফ -8, যেখানে বাইটের সংখ্যা পৃথক হয়। উদাহরণ স্বরূপ:

select length(_utf8 '€'), char_length(_utf8 '€')
--> 3, 1

আপনি দেখতে পাচ্ছেন যে ইউরো চিহ্নটি 0xE282ACকেবলমাত্র একটি অক্ষর সত্ত্বেও 3 টি বাইট (এটি ইউটিএফ -8 এর মতো এনকোডযুক্ত) রয়েছে।


6
কেবলমাত্র ইউসিএস -২ অক্ষর অনুসারে দুটি বাইটে এনকোড করা আছে। এই এনকোডিং (বা আরও সঠিকভাবে ইউটিএফ -16 এলই) যা উইন্ডোজকে বিভ্রান্ত করে "ইউনিকোড" বলে calls মাইএসকিউএল ইউটিএফ -16 সমর্থন করে না; পরিবর্তে এটিতে ইউনিকোড স্ট্রিংগুলি রাখার জন্য সাধারণ পদ্ধতির ইউটিএফ -8 ব্যবহার করা।
বোবিনস

2
উদাহরণস্বরূপ: দৈর্ঘ্য ('日本語'), চর_ দৈর্ঘ্য ('日本語') নির্বাচন করুন;
সানমাই

@ ববিন্স: এমনকি ইউসিএস -২ উদাহরণস্বরূপ 2 টি বাইটেরও বেশি কিছু অক্ষর এনকোড করে 0313 combining comma above। যেহেতু a = 61, 0x00610313 a̓ হিসাবে প্রদর্শিত হয় এবং এটি 4 বাইট নেয়।
Andomar

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

6
সুতরাং আমার ভিচারআর কলামগুলি কীভাবে আকার পরিবর্তন করতে হবে তা নির্ধারণের সময় আমি এই ফাংশনগুলির মধ্যে কোনটি ব্যবহার করব? টেবিলটি তৈরি করার সময় বলতে পারি যে একটি কলাম একটি VARCHAR (10)। এটি কি সর্বোচ্চ 10 অক্ষর বা সর্বোচ্চ 10 বাইটের অনুমতি দেবে?
এখনও_ড্রিমিং_1

19

varchar (10) 10 টি অক্ষর সংরক্ষণ করবে, যা 10 বাইটের বেশি হতে পারে। সূচীতে, এটি ক্ষেত্রের সর্বাধিক দৈর্ঘ্য বরাদ্দ করবে - সুতরাং আপনি যদি ইউটিএফ 8-এমবি 4 ব্যবহার করেন তবে এটি 10 ​​অক্ষর ক্ষেত্রের জন্য 40 বাইট বরাদ্দ করবে।

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