মাইএসকিউএলে, আমি যদি VARCHAR(32)
কোনও ইউটিএফ -8 সারণীতে একটি নতুন ক্ষেত্র তৈরি করি তবে এর অর্থ কি আমি সেই ক্ষেত্রের 32 বাইট ডেটা বা 32 অক্ষর (মাল্টি বাইট) সঞ্চয় করতে পারি?
মাইএসকিউএলে, আমি যদি VARCHAR(32)
কোনও ইউটিএফ -8 সারণীতে একটি নতুন ক্ষেত্র তৈরি করি তবে এর অর্থ কি আমি সেই ক্ষেত্রের 32 বাইট ডেটা বা 32 অক্ষর (মাল্টি বাইট) সঞ্চয় করতে পারি?
উত্তর:
এই উত্তরটি আমার গুগল অনুসন্ধান ফলাফলের শীর্ষে প্রদর্শিত হয়েছিল তবে এটি সঠিক ছিল না:
বিভ্রান্তি সম্ভবত মাইএসকিএলের বিভিন্ন সংস্করণ পরীক্ষা করার কারণে হয়েছে।
http://dev.mysql.com/doc/refman/5.0/en/string-type-overview.html
মাইএসকিউএল অক্ষর ইউনিটগুলিতে অক্ষর কলাম সংজ্ঞায় দৈর্ঘ্যের স্পেসিফিকেশন ব্যাখ্যা করে। (মাইএসকিউএল ৪.১ এর আগে কলাম দৈর্ঘ্যগুলি বাইটে ব্যাখ্যা করা হয়েছিল)) এটি CHAR, VARCHAR, এবং পাঠ্য প্রকারের ক্ষেত্রে প্রযোজ্য।
মজার বিষয় হল (আমি এটি সম্পর্কে ভাবিওনি) নীচে বর্ণা কলামের সর্বোচ্চ দৈর্ঘ্য utf8 দ্বারা প্রভাবিত হয়:
মাইএসকিউএল 5.0.3 এ একটি ভ্রচারের কার্যকর সর্বোচ্চ দৈর্ঘ্য এবং পরে সর্বাধিক সারি আকার (65,535 বাইট, যা সমস্ত কলামের মধ্যে ভাগ করা হয়) এবং ব্যবহৃত অক্ষর সেট সাপেক্ষে। উদাহরণস্বরূপ, utf8 টি অক্ষরের জন্য প্রতিটি চরিত্রের জন্য তিনটি বাইটের প্রয়োজন হতে পারে, সুতরাং utf8 অক্ষর সেটটি ব্যবহার করে এমন একটি VARCHAR কলাম সর্বোচ্চ 21,844 অক্ষর হিসাবে ঘোষিত হতে পারে।
utf8mb4
) "💩💩💩💩💩💩💩💩💩💩" (10 গাদা পো) সংরক্ষণ করতে পারে, এটি 10 অক্ষর তবে 40 বাইট।
এটি আপনাকে 32 মাল্টি বাইট অক্ষর সংরক্ষণ করতে দেয়
ইউটিএফ -8 দিয়ে স্থান বাঁচাতে, CHAR এর পরিবর্তে VARCHAR ব্যবহার করুন। অন্যথায়, মাইএসকিউএল অবশ্যই একটি অক্ষরের জন্য প্রতিটি অক্ষরের জন্য তিনটি বাইট সংরক্ষণ করতে হবে চার্ট অক্ষর সেট utf8 কলাম কারণ এটি সর্বোচ্চ সম্ভাব্য দৈর্ঘ্য। উদাহরণস্বরূপ, মাইএসকিউএলকে একটি চিয়ার (10) চরিত্র সেট utf8 কলামের জন্য 30 বাইট সংরক্ষণ করতে হবে।
CHAR
করি না এবং যখন করি তখন এটি মাল্টি-বাইট চরগুলি সঞ্চয় করার উদ্দেশ্যে নয়, তাই আমি নিরাপদ। কী সম্পর্কে VARCHAR
, আপনি কি নিশ্চিত যে সীমাটি বহু-বাইট চরগুলিতে সংজ্ঞায়িত হয়েছে এবং একক বাইট চরগুলিতে নয়?
কোলেশন সহ 32 টি মাল্টবাইটিস ডেটা , আমি মাত্র এক্সএএমপিপি দিয়ে পরীক্ষা করেছি।varchar(32)
utf8_unicode_ci
1234567890123456789012345678901234567890
কেটে দেওয়া:
12345678901234567890123456789012
মনে রাখবেন যে এগুলি নিয়মিত ASCII অক্ষর নয়।
utf8
তবে এটি আপনি মাইএসকিউএলে ভাঙা ইউনিকোড সমর্থন পেতে পারেন। utf8mb4
পরিবর্তে আপনার এনকোডিং ব্যবহার করা উচিত , কারণ সর্বাধিক রয়েছে। মাইএসকিউএল এর utf8 এর ভেরিয়েন্টের মতো 3 নয়, একটি utf-8 চরে 4 বাইট ...
উচ্চ ঘন ঘন আপডেট টেবিলগুলির জন্য "চর" ব্যবহার করা আরও ভাল কারণ সারিটির মোট ডেটার দৈর্ঘ্য স্থির এবং দ্রুত হবে। ভারচার কলামগুলি সারি ডেটার মাপকে গতিশীল করে। এটি মাইআইএসএএম এর পক্ষে ভাল নয়, তবে আমি ইনোডিবি এবং অন্যদের সম্পর্কে জানি না। উদাহরণস্বরূপ, আপনার যদি খুব সংকীর্ণ "প্রকারের" কলাম থাকে, তবে কেবলমাত্র ন্যূনতম স্থান দাবি করতে ল্যাটিন 1 চরসেট সহ চর (2) ব্যবহার করা ভাল।
CHAR
। InnoDB এর জন্য, আরও অনেকগুলি জিনিস চলছে যে "গতিশীল / স্থির সারি আকার" বিতর্কটি মূলত অপ্রাসঙ্গিক।
CHAR
।
আপনি যদি মাইএসকিউএল ইউটিএফ 8 কলামে পিএইচপি ইউটিএফ 8 স্ট্রিংটি সংরক্ষণ করতে ল্যাটিন 1 এনকোডিং (উদাহরণস্বরূপ পিএইচপি সহ) ব্যবহার করে ডাটাবেসের সাথে সংযুক্ত হন তবে আপনার ডাবল ইউটিএফ 8 এনকোডিং হবে।
যদি ইউটিএফ 8 স্ট্রিংটি $s
32 টি অক্ষর দীর্ঘ তবে 64 বাইট দীর্ঘ এবং কলামটি VARCHAR(32)
ইউটিএফ 8 হয় তবে ডাবল এনকোডিংটি স্ট্রিংটিকে $s
64 টি অক্ষরের দীর্ঘ ইউটিএফ 8 স্ট্রিংয়ে রূপান্তর করবে যা ডাটাবেসে 32 টি প্রথম বাইটের সাথে মিলিয়ে তার 32 টি প্রথম অক্ষরে সংযুক্ত হবে এর $s
। আপনি এই ভেবে শেষ করতে পারেন যে মাইএসকিউএল 5 মাইএসকিউএল 4 এর মতো আচরণ করে তবে বাস্তবে এটি একই প্রভাবের জন্য দ্বিতীয় কারণ।