আমি মাইএসকিউএল ডকুমেন্টেশন পড়তে পারি এবং এটি বেশ পরিষ্কার। তবে, কোন চরিত্রটি ব্যবহার করতে হবে তা কীভাবে সিদ্ধান্ত নেওয়া যায়? কোলাশনের কোন ডেটাতে কোনও প্রভাব আছে?
আমি দু'জনের ব্যাখ্যা জিজ্ঞাসা করছি এবং কীভাবে তাদের চয়ন করব।
আমি মাইএসকিউএল ডকুমেন্টেশন পড়তে পারি এবং এটি বেশ পরিষ্কার। তবে, কোন চরিত্রটি ব্যবহার করতে হবে তা কীভাবে সিদ্ধান্ত নেওয়া যায়? কোলাশনের কোন ডেটাতে কোনও প্রভাব আছে?
আমি দু'জনের ব্যাখ্যা জিজ্ঞাসা করছি এবং কীভাবে তাদের চয়ন করব।
উত্তর:
মাইএসকিউএল ডক্স থেকে :
একটি অক্ষর সেট চিহ্ন এবং এনকোডিংগুলির একটি সেট a একটি কোলিশেশন একটি চরিত্রের সেটগুলিতে অক্ষরের তুলনা করার জন্য নিয়মের একটি সেট। আসুন একটি কাল্পনিক চরিত্র সেট একটি উদাহরণ সঙ্গে পার্থক্য পরিষ্কার করা যাক।
ধরুন আমাদের চারটি বর্ণ সহ বর্ণমালা রয়েছে: 'এ', 'বি', 'এ', 'বি'। আমরা প্রতিটি অক্ষরকে একটি নম্বর দিয়ে থাকি: 'এ' = 0, 'বি' = 1, 'এ' = 2, 'বি' = 3. অক্ষর 'এ' একটি প্রতীক, 0 নম্বরটি 'এ' এর এনকোডিং , এবং চারটি বর্ণ এবং তাদের এনকোডিংগুলির সমন্বয় একটি চরিত্র সেট।
এখন, ধরুন যে আমরা দুটি স্ট্রিং মান, 'এ' এবং 'বি' তুলনা করতে চাই। এটি করার সহজ উপায় হ'ল এনকোডিংগুলি: 'এ' এর জন্য 0 এবং 'বি' এর জন্য 1। 0 টি 1 এর চেয়ে কম, আমরা বলি 'A' 'B' এর চেয়ে কম। এখন, আমরা সবেমাত্র যা করেছি তা হ'ল আমাদের অক্ষর সেটগুলিতে একটি কোলেশন প্রয়োগ করা। কোলেশন হ'ল নিয়মের একটি সেট (এই ক্ষেত্রে কেবলমাত্র একটি নিয়ম): "এনকোডিংগুলি তুলনা করুন।" আমরা সম্ভাব্য সমস্ত কল্যানেশনের এই সর্বাধিক সহজটিকে বাইনারি কোলেশন বলি।
তবে আমরা যদি ছোট ছোট এবং বড় হাতের অক্ষরের সমতুল্য বলতে চাই? তারপরে আমাদের কমপক্ষে দুটি বিধি থাকবে: (1) ছোট হাতের অক্ষরগুলি 'এ' এবং 'বি' কে 'এ' এবং 'বি' এর সমতুল্য বলে গণ্য হবে; (২) তারপরে এনকোডিংগুলি তুলনা করুন। আমরা একে কেস-সংবেদনশীল কোলেশন বলি। এটি বাইনারি কলেজের চেয়ে কিছুটা জটিল।
বাস্তব জীবনে, বেশিরভাগ চরিত্রের সেটগুলিতে অনেকগুলি অক্ষর থাকে: কেবল 'এ' এবং 'বি' নয় পুরো পুরো বর্ণমালা, কখনও কখনও একাধিক বর্ণমালা বা হাজারে অক্ষর সহ পূর্বের লেখার ব্যবস্থা, পাশাপাশি আরও অনেক বিশেষ চিহ্ন এবং বিরাম চিহ্ন রয়েছে। বাস্তব জীবনেও, বেশিরভাগ কোলিশনের অনেকগুলি বিধি রয়েছে: কেবল সংবেদনশীলতা নয়, অ্যাকসেন্ট সংবেদনশীলতাও (একটি "অ্যাকসেন্ট" এমন একটি চিহ্ন যা জার্মান 'ö' এর মতো একটি চরিত্রের সাথে জড়িত) এবং একাধিক-চরিত্রের ম্যাপিংস (যেমন এই নিয়ম যে ' German '= দুটি জার্মান কোলেশনের একটিতে' ওই ')।
একটি অক্ষর এনকোডিং হল অক্ষরগুলি এনকোড করার একটি উপায় যাতে তারা মেমরির সাথে ফিট করে। অর্থাৎ, অক্ষরটি যদি আইএসও -8859-15 হয় তবে ইউরো চিহ্ন, €, 0xa4 হিসাবে এনকোড হবে এবং ইউটিএফ -8 এ এটি 0xe282ac হবে।
কোলেশন অক্ষর তুলনা করতে কিভাবে, latin9 সেখানে চিঠি হিসাবে e é è ê f
, যদি তাদের বাইনারি উপস্থাপনা অনুসারে সাজানো, এটা যাব e f é ê è
কিন্তু কোলেশন সেট করা হয় যদি উদাহরণস্বরূপ, ফরাসি, আপনি তাদের অনুক্রমে হবে আপনি তারা হবে, যা সব e é è ê
সমান, এবং তারপর f
।
একটি অক্ষর সেট হ'ল সমস্ত লিখিত গ্লাইফের একটি উপসেট। একটি অক্ষর এনকোডিং নির্দিষ্ট করে যে কীভাবে এই অক্ষরগুলি সংখ্যাসূচক মানগুলিতে ম্যাপ করা হয়। কিছু অক্ষর এনকোডিংগুলি যেমন ইউটিএফ -8 এবং ইউটিএফ -16, ইউনিভার্সাল ক্যারেক্টার সেটটিতে যে কোনও অক্ষরকে এনকোড করতে পারে। অন্যরা, US-ASCII বা ISO-8859-1 এর মতো কেবল একটি ছোট উপসেট এনকোড করতে পারে, কারণ তারা যথাক্রমে যথাক্রমে 7 এবং 8 বিট ব্যবহার করে। যেহেতু অনেকগুলি মান একটি অক্ষর সেট এবং একটি অক্ষর এনকোডিং উভয়ই নির্দিষ্ট করে, "অক্ষর সেট" শব্দটি প্রায়শই "অক্ষর এনকোডিং" এর জন্য নির্বিঘ্নে প্রতিস্থাপন করা হয়।
একটি কোলেশনে এমন বিধি থাকে যা নির্দিষ্ট করে দেয় কীভাবে বাছাই করার জন্য অক্ষরগুলি তুলনা করা যায়। কোলেশন বিধিগুলি স্থানীয়ভাবে নির্দিষ্ট হতে পারে: দুটি অক্ষরের যথাযথ ক্রমটি ভাষা থেকে ভাষাতে পরিবর্তিত হয়।
একটি অক্ষর সেট এবং কোলেশন নির্বাচন করা আপনার অ্যাপ্লিকেশনটি আন্তর্জাতিকীকরণযোগ্য কিনা তা নেমে আসে। যদি তা না হয় তবে আপনি কোন লোকেলকে লক্ষ্য করছেন?
আপনি কোন অক্ষর সেটটি সমর্থন করতে চান তা চয়ন করতে, আপনাকে আপনার অ্যাপ্লিকেশনটি বিবেচনা করতে হবে। যদি আপনি ব্যবহারকারীর সরবরাহিত ইনপুট সংরক্ষণ করে থাকেন তবে আপনার সফ্টওয়্যারটি শেষ পর্যন্ত যে সমস্ত লোকেলগুলিতে ব্যবহৃত হবে তা পূর্বেই বলা কঠিন হতে পারে। তাদের সকলের সমর্থন করার জন্য, শুরু থেকে ইউসিএসকে (ইউনিকোড) সমর্থন করা ভাল। তবে এর জন্য একটি ব্যয়ও রয়েছে; অনেক পশ্চিমা ইউরোপীয় চরিত্রের জন্য এখন একের পরিবর্তে দুটি বাইট স্টোরেজ প্রয়োজন হবে।
আপনার ডাটাবেস সূচক তৈরি করতে কল্যানটি ব্যবহার করে এবং পরবর্তী সময়ে বাছাই করা ফলাফল দেওয়ার জন্য সেই সূচকটি ব্যবহার করে ডান কলিশ নির্বাচন করা কার্য সম্পাদনে সহায়তা করতে পারে। তবে, যেহেতু কোলেশন বিধিগুলি প্রায়শই স্থানীয়-নির্দিষ্ট থাকে, তাই অন্য কোনও লোকেলের নিয়ম অনুসারে ফলাফলগুলি বাছাই করা দরকার হলে সেই সূচকটি মূল্যহীন।
আমি ব্যবহারের পরামর্শ দিচ্ছি utf8mb4_unicode_ci
, যা বাছাই এবং তুলনা করার জন্য ইউনিকোড স্ট্যান্ডার্ডের উপর ভিত্তি করে, যা বিভিন্ন বিস্তৃত ভাষায় নির্ভুলভাবে সাজায়।
UTF-8
ডেটাবেসের একটি সিস্টেম বাইরে এনকোডিং, তারপর ডাটাবেসের মধ্যে সবকিছু এছাড়াও সঠিকভাবে লিখতে হবে যদি আপনি ব্যবহার utf8mb4
মধ্যে মাইএসকিউএল । যখন এটি মাইএসকিউএলে নির্দিষ্ট অক্ষরগুলির জন্য পাঠ্যকে বাছাই, তুলনা এবং রূপান্তরকরণের সঠিক ক্রিয়াকলাপের কথা আসে তখন নিখুঁত সমাধান খুঁজে পাওয়া শক্ত তবে *_unicode_ci
এটি অবশ্যই এর চেয়ে ভাল *_general
তবে এর ত্রুটিগুলিও রয়েছে। দয়া করে পড়ুন: dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html