কেন একটি একক ডাটাবেসে কলাম কলোশনগুলিকে মিশ্রণকে খারাপ বলে বিবেচনা করা হয়?


11

দুটি কারণ রয়েছে যা আমাকে এই প্রশ্ন জিজ্ঞাসা করতে অনুরোধ করে:

tSQLt
টি-এসকিউএল টেস্টিং ফ্রেমওয়ার্ক টিএসকিউএলটি যখন একটি অ-ডিফল্ট কোলেশন সহ কলামগুলি উপস্থিত থাকে তখন এটি "উচ্চ তীব্রতার " বিষয়টিকে বিবেচনা করে । পরীক্ষার লেখক নীচে বলেছেন:

আমি প্রস্তাব দিচ্ছি না যে প্রতিটি স্ট্রিং কলামে একটি কোলেশন থাকা উচিত যা ডেটাবেসের জন্য ডিফল্ট কল্যানেশনের সাথে মেলে। পরিবর্তে, আমি পরামর্শ দিচ্ছি যে এটি যখন আলাদা হয় তখন এর জন্য ভাল কারণ থাকতে হবে।

তবুও, ব্যর্থ পরীক্ষার তীব্রতা হিসাবে উল্লেখ করা হয়েছে, উচ্চ হিসাবে বিবেচিত হয়।

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

পার্শ্ব-নোট হিসাবে, রেডগেটের সিআই-সরঞ্জাম প্যাকেজ, ডিএলএম অটোমেশন স্যুট , অভিযোগ ছাড়াই বিভিন্ন ধরণের জমায়েতে মোতায়েন সমর্থন করে।

ডেটাবেস ডিফল্টে সমস্ত কলাম কলোশন রাখার পরামর্শটি আমার কাছে গাইডলাইন বা সেরা অনুশীলনের মতো মনে হয়। কেন কেউ কেউ এরকম গুরুতর ত্রুটি হিসাবে বিবেচিত হন?


আপনি এসকিউএল কপ পরীক্ষার tSQLt অবতারকে উল্লেখ করছেন। TSQLt পরীক্ষাগুলি পাস বা ব্যর্থ হওয়ায় এগুলি একটি প্রস্তাবিত ডিফল্ট প্রস্তাব করতে হবে। ব্যবহারকারীরা সম্পূর্ণরূপে এসকিউএলকপ পরীক্ষাগুলি তাদের নিজস্ব প্রয়োজনীয়তার সাথে খাপ খাইয়ে নেবে বলে আশা করা হচ্ছে কারণ তারা টিএসকিউএলটি কাঠামোর দ্বারা গৃহীত এসকিউএলকপি স্কিমায় সংরক্ষিত পদ্ধতি ছাড়া আর কিছু নয়।
ডেভিড অ্যাটকিনসন

উত্তর:


19

ডেটাবেস ডিফল্টে সমস্ত কলাম কলোশন রাখার পরামর্শটি আমার কাছে গাইডলাইন বা সেরা অনুশীলনের মতো মনে হয়।

আপনি এখানে পুরোপুরি সঠিক।

কেন কেউ কেউ এরকম গুরুতর ত্রুটি হিসাবে বিবেচিত হন?

একই কারণে আপনি প্রায়শই শুনতে / পড়বেন যে "আপনার কখনও ব্যবহার করা উচিত নয় :"

  • এক্সিকিউটেবল-এর পাথ
  • GOTO বিবৃতি
  • SQLCLR
  • WITH (NOLOCK)
  • ইত্যাদি, ইত্যাদি

কিছু বৈশিষ্ট্য / অপশন / প্রযুক্তি অন্যদের তুলনায় আরও জটিল এবং সাধারণত ব্যবহারকারী দ্বারা আরও জ্ঞানের প্রয়োজন কারণ এটি ব্যবহার করার সময় সমস্যায় পড়ার সম্ভাবনাগুলি কোনও সমস্যা না হওয়ার সম্ভাবনার চেয়ে অনেক বেশি। সুতরাং, সাধারণ জনগণের জন্য এই জাতীয় জিনিসের বিরুদ্ধে সাধারণ নিয়ম করা সহজ। আসলে, কর্মক্ষেত্রে "কোডিং স্ট্যান্ডার্ডস" লেখার সময় আমার সর্বদা নিয়ম থাকবে না কখনইসেন্সরগুলি ব্যবহার করুন, তবুও আমি সেগুলি নিজেই ব্যবহার করি কারণ আমি তাদের "কখন" ব্যবহার করতে এবং "কীভাবে" কার্যকরভাবে ব্যবহার করতে পারি উভয়ই জানি। তবে যে লোকেরা কেবল মাঝেমধ্যে প্রশ্ন লেখেন তাদের কাছে এটি জানা উচিত নয় expected এটি "রেজিস্ট্রি সম্পাদনা করবেন না যতক্ষণ না আপনি পুরোপুরি না জানেন আপনি কী করছেন" এর মতোই, বা আমাদের (খুব অল্প বয়সী) বাচ্চাদের বাবা-মা হিসাবে তৈরি করার নিয়ম যেখানে আমাদের তাদের কেবল কিছু করার দরকার নেই কারণ তারা কেবল কারণ যখন কোনও নির্দিষ্ট কাজ করা ঠিক হয় বা কীভাবে এটি করা যায় তার জটিলতাগুলি অতিক্রম করতে সক্ষম নয়।

কোলেশনগুলির ক্ষেত্রে, এটি একটি অত্যন্ত জটিল এবং বিভ্রান্তিকর বিষয় এবং আপনি উভয় হার্ড-ত্রুটির মধ্যে দৌড়াতে পারেন (এগুলি একটি ইস্যু তবে ইস্যুটির চেয়ে কম কারণ তারা সুস্পষ্ট এবং এটি সমাধানের পক্ষে যথেষ্ট সহজ) এবং "বিজোড়" আচরণ যেখানে বিষয়গুলি কেন সেভাবে আচরণ করছে তা ব্যাখ্যা করা শক্ত (কেন কিছু আইটেম ফিল্টার করা হয়, বা ফিল্টার করা হয় না, প্রত্যাশার বাইরে বা কেন বাছাই করা প্রত্যাশার বাইরে কাজ করে)। এবং দুঃখের বিষয়, এমন একটি ভুল সংখ্যার আশেপাশে ভাসছে যা জনগণের বিভ্রান্তি আরও বাড়িয়ে তোলে। আমি আসলে কোলিশেশন এবং এনকোডিং ইত্যাদির সাধারণ জ্ঞানকে ব্যাপকভাবে বৃদ্ধি করার জন্য একটি প্রকল্পে কাজ করছি এবং আশা করি ভুল তথ্য এবং মিথগুলিকে প্রতিহত করব, তবে এখনও এটি প্রকাশের জন্য প্রস্তুত নেই (হয়ে গেলে আমি এটির সাথে একটি লিঙ্ক দিয়ে আপডেট করব)।

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


প্রশ্ন থেকে এটি সম্পর্কে (জোর দেওয়া):

অক্টোপাস ডিপ্লয় সার্ভার কনফিগার করার সময়, অক্টোপাস সার্ভার-ইনস্ট্যান্স-এর সূচনা করার সময় সেটআপটি একটি ফ্যাটাল ত্রুটির সাথে ব্যর্থ হয়। ত্রুটি-বার্তার সাথে সম্পর্কিত নিবন্ধটি কেন এটি প্রয়োজনীয় তা ব্যাখ্যা করে না

আমি লিঙ্কযুক্ত ডকুমেন্টেশন পৃষ্ঠাটি যাচাই করেছিলাম এবং এটি কেন এটি প্রয়োজনীয় তা সত্যই তা ব্যাখ্যা করে। আমি নীচে সেই ডকুমেন্টেশন থেকে প্রাসঙ্গিক তথ্যটি অনুলিপি করেছি:

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

তারা বলছেন যে তাদের কোডটি, অক্টোপাস ডাটাবেজে স্ট্রিং কলামগুলির মধ্যে যোগ থাকে এবং ভবিষ্যতে আপগ্রেডে নতুন কোড প্রবর্তিত হতে পারে যার সাথে নতুন স্ট্রিং কলামগুলিতে অতিরিক্ত JOIN থাকে । নতুন কলামগুলি হয় হয় CREATE TABLEবা এর মাধ্যমে ALTER TABLE ... ADDযদি হয় তবে ডাটাবেসের ডিফল্ট কোলেশন বরাদ্দ করা হবেCOLLATEনতুন স্ট্রিং কলাম (গুলি) এর জন্য কীওয়ার্ড নির্দিষ্ট করা হয়নি। এবং স্ট্রিং কলামগুলির মধ্যে জয়েনগুলি যেমন একটি সমান্তরালে না থাকে সেগুলি একটি কোলেশন মিলবে না ত্রুটি উত্পন্ন করবে। তারা মনে হয় যে ব্যবহারকারীকে তাদের নিজস্ব কোলেশন (সম্ভবত বিভিন্ন লোকেল সমন্বিত করতে) বেছে নিতে দেওয়া হয়েছে, কারণ তারা শীর্ষে বলে যে একমাত্র প্রয়োজন হ'ল কোলেশন কেস-সংবেদনশীল হওয়া উচিত। এবং যেহেতু ডাটাবেসগুলির কোলেশন যে তাদের কোডে বাস করে তা সর্বদা একইরূপে গ্যারান্টিযুক্ত নয়, তাই তারা COLLATEনতুন নতুন স্ট্রিং কলামগুলিতে একই কোলেশনকে বাধ্য করার জন্য কীওয়ার্ডটি ব্যবহার করতে পারে না (ভাল, তারা প্রযুক্তিগতভাবে করতে পারে তবে এটি ডায়নামিকের প্রয়োজন) এসকিউএল আপডেট স্ক্রিপ্ট তৈরি করার সময় এত সহজে মোকাবেলা করা সহজ নয়)। যদি তারা COLLATEকীওয়ার্ডটি ব্যবহার করতে সক্ষম হয় তবে তারা পারতডেটাবেসের ডিফল্ট কলাইশনটি স্ট্রিং কলামগুলির চেয়ে আলাদা হওয়া থেকে দূরে যান। এটি কঠোর "কোলেশন মেলে না" ত্রুটিগুলি এড়াতে পারে, কিন্তু তবুও সেই স্ট্রিং কলামগুলির মধ্যে একটির সাথে তুলনামূলক ক্রিয়াকলাপের সম্ভাবনা এবং এই স্ট্রিং আক্ষরিক বা পরিবর্তনশীল যার ফলে "বিজোড়" আচরণের ফলে কলামটির কোলেশন ব্যবহার করা হবে এবং ডেটাবেসগুলির নয় কোলেশন। অবশ্যই, এটি খুব ভাল প্রত্যাশিত আচরণ হতে পারে। তবে যেহেতু এটি একটি তৃতীয় পক্ষের অ্যাপ্লিকেশন, তাই আচরণটি তাদের উচিত যা তারা ইচ্ছা করে 50 এর মধ্যে 50/50 সুযোগের চেয়ে ক) ব্যবহারকারী কী চায় (বা আপত্তি জানায় না) এবং খ) ব্যবহারকারী কী বাগটি বিবেচনা করে (এবং তারপরে) বন্য হংসের তাড়াতে এবং / অথবা তাদের সফ্টওয়্যার কীভাবে বগি হয় সে সম্পর্কে ব্লগগুলিতে বিক্রেতার সহায়তার সময় নষ্ট করে।


আরে, কোলিশেশন সম্পর্কে এই প্রকল্পের কোনও সংবাদ আছে?
ইয়ারোস্লাভ

10

একটি ছোট বাক্যে: COLLATION বাছাই এবং তুলনা সংজ্ঞায়িত করে

সুতরাং, জোটটি এসকিউএল সার্ভার বর্ণের ডেটা তুলনা এবং বাছাই করতে যে নিয়মগুলি ব্যবহার করে তা নির্ধারণ করে। এই বিধিগুলি ভাষা / স্থানীয় সচেতন এবং কেস, অ্যাকসেন্ট, কানা এবং প্রস্থের ক্ষেত্রেও সংবেদনশীল হতে পারে। কোলেশন প্রত্যয়গুলি অভিধানের নিয়মকে (ইন) সংবেদনশীলতা সনাক্ত করে: _ সিএস (কেস সংবেদনশীল), _সিআই (কেস সংবেদনশীল), _ এএস (অ্যাকসেন্ট সংবেদনশীল), _ এআই (অ্যাকসেন্ট সংবেদনশীল) এবং _ কেএস (কান সংবেদনশীল)। _ বাইন (বাইনারি) এবং _ বিআইএন 2 (বাইনারি-কোড পয়েন্ট) দ্বারা সনাক্ত করা বাইনারি কোলিশগুলি সমস্ত ক্ষেত্রে সংবেদনশীল।

"কোলেশন দ্বন্দ্ব সমাধান করতে পারে না" ত্রুটিগুলি এড়াতে এবং বিভিন্ন অজ্ঞাতসারে প্রকাশিত অভিব্যক্তির কারণে পারফরম্যান্সকে হারাতে পারে এ জন্য বিভিন্ন কোলিশ অবশ্যই অবশ্যই কর্মক্ষেত্রের দাবি করবে । বিভিন্ন কোলেশনগুলির সাথে ডিল করা একটি দুঃস্বপ্ন হতে পারে (সেখানে হয়েছে) তাই এজন্য যে কোনওটি বেছে নেওয়ার সাথে এটির সাথে যুক্ত থাকার সুপারিশ।

আরও তথ্যসূত্র:


1

অনেক কিছুর মতো, এসকিউএল এর পূর্ববর্তী সংস্করণগুলিতে এটি বেশ তাৎপর্যপূর্ণ সমস্যা তৈরি করতে পারে। এসকিউএল 7/2000 থেকে এই নিবন্ধটি দেখুন

স্কেল সার্ভারসেন্ট্রাল কোলেশন

এটি এখন আরও বেশি শক্তিশালী, এবং এমন পরিস্থিতি রয়েছে যেখানে আরও আধুনিক সিস্টেমে এটির ন্যায্যতা রয়েছে, তবে এটির পরিবর্তনের জন্য এখনও বেশ কয়েকটি আকর্ষণীয় বিষয় রয়েছে।

এখানে আরও আধুনিক সংস্করণে আরও একটি দরকারী সিরিজ রয়েছে। ড্যান গুজম্যান লিখেছেন, যিনি আমি এখানে নিয়মিত পোস্টগুলি বিশ্বাস করি যাতে তিনি খুব শীঘ্রই পাইপ আপ করতে পারেন :)

এসকিউএল কোলেশন হেল

সংক্ষেপে, সামঞ্জস্যতা, মানায়ন এবং সম্ভাব্য পারফরম্যান্স হিটগুলি মিক্সড কোলেশন ব্যবহার না করার প্রধান কারণ।


0

কোলেশনের মধ্যে ডেটা স্থানান্তর ডেটা পরিবর্তন করতে পারে যদি এটি এনচার (16 বিট) এর পরিবর্তে চার (8-বিট পাঠ্য) হয়।

আমি এই পৃষ্ঠাটি থেকে https://the.agilesql.club/blogs/Blogs/Ed-Elliott/What-collation-variables-take-on-inT-SQL থেকে বিশ্বাস করি যে যখন কোনও ভেরিয়েবল একটি টেবিলের পাঠ্য সহ নির্ধারিত হয় তখন তা হয় সুস্পষ্টভাবে অনুবাদ করা / বর্তমান ডাটাবেসের কোলেশন হিসাবে বিবেচনা করা হয়। আপনি ভেরিয়েবলের পাঠ্যটির কি হবে যখন আপনি অন্য একটি ডাটাবেসে চলে যান? সেই বাইটগুলি কী নতুন কোলেশনে আবার অনুবাদ করা (যদি প্রয়োজন হয়)?

আমি "লাতিন" চিঠির উচ্চারণগুলি সরিয়ে ফেলতে এবং কেবলমাত্র ASCII পাঠ্যটি রেখে যাওয়ার জন্য একটি কোলেশন ট্রিকটি গ্রহণ করেছি, যা আমার তৃতীয় পক্ষের সফ্টওয়্যার অ্যাকসেন্টগুলিতে চাপ দিচ্ছিল - আমি পাঠ্যকে একটি কোলেশনে রেখেছি যেখানে কেবল ASCII এবং আধুনিক গ্রীক বর্ণমালা রয়েছে; Collate SQL_Latin1_General_CP1253_CI_AI। "স্লান" রোমান অক্ষরে উচ্চারণে! ;-)

তবে খারাপ খবর যদি আমি সেগুলি রাখতে চাইতাম!

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