আমি মনে করি যে প্রশ্নটি হিসাবে বর্ণিত হয়েছে (2015-04-22, "কোন কোলেশন [...]") এর অর্থ কি তা নয়, প্রদত্ত গ্রহণযোগ্য উত্তর কোলেশনের পরিবর্তে এনকোডিং সম্পর্কে কথা বলে। উদ্দেশ্যযুক্ত প্রশ্নের পরিবর্তে আমাকে বর্ণিত প্রশ্নের উত্তর দেওয়া যাক, কারণ আমি মনে করি এটি আকর্ষণীয় :-)
উইকিপিডিয়া বলেছে "কোলেশন হ'ল লিখিত তথ্যের সমাবেশকে একটি স্ট্যান্ডার্ড অর্ডারে পরিণত করা"। কম্পিউটিংয়ে, কোলেশন "এই জাতীয় আদেশের একটি বিশদকরণ" এর অর্থ গ্রহণ করেছে। অন্য কথায়, একটি কোলেশন হ'ল ত্রি-উপায়ে তুলনা ফাংশনের সংজ্ঞা (বা বোঝায়)।
আমি মনে করি সংক্ষিপ্ত উত্তরটি সম্ভবত "সম্ভবত" হতে পারে। কমপক্ষে আমি নিম্নলিখিত শেননিগান সম্পর্কে সচেতন:
#!/usr/bin/python
name = u"Jonas K\xf6lker" # \xf6 is o-umlaut
enc = name.encode('utf-8')
assert len(name) == 12 # \xf6 is one character
assert len(enc) == 13 # but two bytes in utf-8
import locale
locale.setlocale(locale.LC_COLLATE, "da_DK.utf8") # works on my machine
long_form = locale.strxfrm(enc)
assert len(long_form) == 38
locale.strxfrm
এটি একটি ফাংশন যা Returns a string that behaves for cmp locale-aware
এটি, এটি একটি স্ট্রিংকে এমনভাবে এনকোড করে তোলে যে একইভাবে এনকোড করা অন্য স্ট্রিংয়ের সাথে বাইট-বাই-বাইট স্ট্যান্ডার্ড লিক্সোগ্রাফিক তুলনাটি স্থানীয়ভাবে নির্দিষ্ট করা কোলেশন ফাংশন অনুসারে স্ট্রিংগুলির তুলনা করার মতো একই ফলাফল তৈরি করবে।
কিছু পর্যবেক্ষণ: ইন da_DK.utf8
, স্ট্রিং ouüö
বাছাই করা হয়। ইন de_DE.utf8
, স্ট্রিং oöuü
বাছাই করা হয়। দ্রষ্টব্য len(long_form) == 38
এবং 38> 13. (দৈর্ঘ্যও 38 ইন de_DE.utf8
।)
আপনার ডাটাবেস কিছু স্ট্রিং ক্ষেত্রের উপর একটি সূচক থাকে, তাহলে অনুযায়ী collated da_DK.utf8
, এটা হতে পারে অভ্যন্তরীণভাবে ভালো কিছু কাজ করা strxfrm
অর্ডার একটি সহজ তুলনা আছে হবে। (অন্যদিকে, ডিস্কগুলি ধীরে ধীরে more আরও কমপ্যাক্ট উপস্থাপনার ভিত্তিতে সূচকটি দ্রুততর হতে পারে, যদি প্রতি-চরিত্রের তুলনায় ব্যয় আরও কম অক্ষরের সাথে তুলনা করে অফসেটের চেয়ে বেশি হয়))
আপনি জিজ্ঞাসা করেছেন "কোলেশনের কোনও প্রশ্নের গতিতে কোনও প্রভাব আছে?", যার আমি উত্তরটি হ্যাঁ সম্পর্কে যথেষ্ট নিশ্চিত: "সি" (ওরফে "পোসিক্স") কোলিশনটি কেবল ইউনিকোড কোড পয়েন্টের মানগুলির সাথে তুলনা করে, যেখানে ডেনিশ ( da_DK.utf8
) এবং জার্মান ( de_DE.utf8
) স্থানীয় লোকেরা আরও জটিল কিছু করে। এটি ক্যোয়ারী গতিতে কিছুটা প্রভাব ফেলবে, যদিও আমি সন্দেহ করি এটি উদ্বেগের মতো হবে না।
"কোলেশনের উপর নির্ভর করে কোনও টেবিলের আকার পরিবর্তন হয়?" - আমি কল্যান অনুসারে একটি সূচক এবং অন্য কোলেশন অনুসারে আলাদা সূচক, বা এই জাতীয় দুটি সূচকের মধ্যে একটির মতো কিছু strxfrm
রূপান্তরিত প্রয়োগের সাথে কল্পনা করতে পারি । সেই কাল্পনিক দৃশ্যে, যদি বিভিন্ন আকারের বৈশিষ্ট্যযুক্ত দুটি মিল থাকে তবে উত্তরটি হ্যাঁ।
"প্রস্তাবিত কোলেশনটি কোনটি হবে?" - এটি আপনার স্ট্রিং বাছাই করতে হবে কেন তার উপর নির্ভর করে। যদি কেবল স্ট্রিং অর্ডার দেওয়ার কিছু প্রমিত উপায় থাকে তবে আমি সম্ভবত "সি" দিয়ে যেতে পারি। যদি এটি মানুষের প্রত্যাশা অনুসারে বাছাই করা ক্রমে ব্যবহারকারীদের কাছে ডেটা উপস্থাপন করে এবং সেই প্রত্যাশাগুলি তাদের সংস্কৃতি দ্বারা রুপান্তরিত হয় এবং আপনি ডাটাবেসটি (এবং অন্য কোনও স্তর নয়) বাছাই করতে চান, সম্ভবত আপনার প্রতি কোলেশন অনুসারে একটি সূচক তৈরি করা উচিত অর্থাত্ ডেনিসের পক্ষে কমপক্ষে একটি da_DK.utf8
এবং de_DE.utf8
জার্মানদের মতে একটি । যদিও আমি মনে করি এটি মোটামুটি দ্রুত বেশ বড় হয়ে উঠবে, যদিও।
এই সমস্ত আপনার ডেটাবেজের অভ্যন্তরীণ কাজের উপর নির্ভর করে; আমি মনে করি এটি "প্রমিত" (LOL!) এসকিউএল ছাড়িয়ে ভাল beyond সর্বদা হিসাবে, আপনার নির্দিষ্ট ডাটাবেস সিস্টেমে ডকুমেন্টেশন পরামর্শ করুন।