'কোথায়' তে অ্যাকসেন্টগুলি উপেক্ষা করুন


17

আমাদের ডাটাবেসে কারোন / হাটসেকের সাথে আমাদের একাধিক এন্ট্রি রয়েছে। এখন আমাদের ব্যবহারকারীরা কারন / হ্যাটস্কেক সহ এন্ট্রিগুলি সন্ধান করতে চান যখন তারা বিনা প্রবেশে অনুসন্ধান করে। আমি এটি একটি সাধারণ উদাহরণ দিয়ে দেখাব:

আমাদের ডাটাবেসে আমাদের প্রবেশ রয়েছে (নামের সাথে যোগাযোগ করুন)

Millière

সুতরাং এই নামটি সেই দেশে সঠিক যেখানে ব্যক্তি বাস করেন।

আমাদের দেশে কারোন / হাটসেকের সাথে আমাদের কোনও অক্ষর নেই, তাই আমাদের ব্যবহারকারী অনুসন্ধান করে Milliereèস্পষ্টত মেলে না তেমন কোনও ফলাফল আসেনি e

আমি কোন ধারণা কিভাবে এই যেমন উপলব্ধি করা পারে é, è, êএবং আরো অনেক পাওয়া যায় (এবং এই শুধুমাত্র চিঠির জন্য একটি উদাহরণ e...)।

(অন্য উপায়টি অনেক সহজ হবে, কারণ আমি কেবল অক্ষরটি হরেক / হ্যাটশেকের সাথে সমস্ত বর্ণকে মৌলিক সাথে প্রতিস্থাপন করতে পারি vious স্পষ্টতই, আমাদের ব্যবহারকারীরা ডাটাবেসে নামের সঠিক সংস্করণ চান, পঙ্গু নয়))


নোটটি "è" তে কারোন / হ্যাক নেই, এতে মারাত্মক উচ্চারণ রয়েছে; একটি caron / hacek হবে "ě"। আপনি কি "উচ্চারণ সহ অক্ষর" বা এরকম কিছু বোঝাতে চাইছেন? অথবা আপনি বিশেষভাবে কারন / হেস্ক অ্যাকসেন্টটি বোঝাতে চান?
স্মৃতি

আমি "চিহ্ন" সহ যে কোনও অক্ষর বোঝাতে চাইছি (দুঃখিত আমি এর আসল নামটি জানি না
lumo

উত্তর:


31

অ্যাকসেন্ট সংবেদনশীল কোলেশন ব্যবহার করে এই সমস্যা সমাধান করা যেতে পারে ।

আপনার ডাটাবেস সম্ভবত একটি এএস (অ্যাকসেন্ট সংবেদনশীল) কোলেশন ব্যবহার করছে তাই ডিফল্টরূপে এটি অ্যাকসেন্ট সহ সঠিক মিলের জন্য অনুসন্ধান করবে।

আপনি তুলনা সহ একটি কোলেশন নির্দিষ্ট করে ডাটাবেস ডিফল্টের তুলনায় অন্য কোলেশন ব্যবহার করার জন্য WHERE ধারাটি নির্দেশ করতে পারেন।

ইন এই dbfiddle আমি একটি উদাহরণ latin1 collations ব্যবহার করে তৈরি করা কিন্তু আপনি কোলেশন আপনি শুধু কোলেশন আপনার কলাম বর্তমানে ব্যবহার হয় মধ্যে এআই আঃ পরিবর্তন করে ব্যবহার করছেন সঙ্গে একই পদ্ধতির ব্যবহার করতে পারে।

কলম্বান ব্যবহার করছে এমন জোটের সাথে মিলছে অ্যাকসেন্ট সংবেদনশীল কোলেশন Use উদাহরণস্বরূপ, যদি কলামটি ব্যবহার করছে SQL_Latin1_General_CP1_CI_AS, ব্যবহার করছে SQL_Latin1_General_CP1_CI_AIএবং না Latin1_General_CI_ASবা Latin1_General_100_CI_ASএই দুটির কোনও প্রকরণের যেহেতু অ-এসকিউএল_ কোলিশেশনগুলির আচরণ কেবল উচ্চারণ-সংবেদনশীলতার চেয়ে আরও বিভিন্নভাবে পৃথক হবে, এবং এটি ব্যবহারকারীদের দ্বারা প্রত্যাশিত নাও হতে পারে।

আপনি বর্তমান কোলেশন ইন পরীক্ষা করতে পারেন sys.columns

CREATE TABLE testaccent (name nvarchar(50));
GO
INSERT INTO testaccent (name) VALUES ('Millière') , ('Milliere');
GO
-- returns Miliere
SELECT * FROM testaccent WHERE name = 'Milliere';

-- returns both
SELECT * FROM testaccent WHERE name='Milliere' COLLATE Latin1_General_CI_AI

--only returns Miliere
SELECT * FROM testaccent WHERE name='Milliere' COLLATE Latin1_General_CI_AS

আরও তথ্যের জন্য এসকিউএল সার্ভার কলেশন ব্যবহার করে পড়ুন ।

তারপরে আবার আপনি সম্ভবত "e" "e" দিয়ে বাছাই করে তা নিশ্চিত করার জন্য এই জোটটি ব্যবহার করতে বাছাই করতে চান ( মন্তব্যে peufeu উল্লেখ করেছেন)) অন্যথায়, যে ব্যক্তি বর্ণানুক্রমিক ক্রমে ফলাফলের মাধ্যমে প্যাগিনেট করে সে "é" না পেয়ে তারা যেখানে তাদের প্রত্যাশা করে তা অবাক করে দেবে, তবে আপনি যদি কেবল এই প্রশ্নটি স্পর্শ করতে চান তবে আপনিও এই COLLATEধারাটি যুক্ত করতে পারেন ORDER BY

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

কিছুটা এইরকম:

ALTER TABLE 
dbo.[table_name] ADD [SearchName] datatype_of_name_column 
AS ([Name] COLLATE LATIN1_GENERAL_100_CI_AI)); 

CREATE INDEX [IX_table_name_SearchName] 
ON dbo.[table_name] ([SearchName] ASC);

অথবা আপনি গণিত কলাম যুক্ত করার পরিবর্তে একটি দৃশ্য তৈরি করতে পারেন ( জয়াও পছন্দ হিসাবে )।


1
টম: আমি নোট করব (এবং হাইলাইট করব) যে কলামটি যে কলামটি ব্যবহার করছে সেগুলির অ্যাকসেন্ট-সংবেদনশীল সংস্করণটি ব্যবহার করা উচিত (3 অনুচ্ছেদে বর্ণিত ডাটাবেসের ডিফল্ট কোলিশন এই প্রশ্নের সাথে প্রাসঙ্গিক নয়)। যদি কলামটি ব্যবহার করছে SQL_Latin1_General_CP1_CI_AS, ব্যবহার করছে SQL_Latin1_General_CP1_CI_AIএবং না Latin1_General_CI_ASবা Latin1_General_100_CI_ASএই দুটির কোনও প্রকরণের যেহেতু অ- SQL_সংগৃহীত আচরণগুলি কেবল অ্যাকসেন্ট-সংবেদনশীলতার চেয়ে আরও অনেক কিছু ক্ষেত্রে পৃথক হবে এবং এটি ব্যবহারকারীদের দ্বারা প্রত্যাশিতও নাও হতে পারে। কোলেশন পাওয়া যায় sys.columns
সলোমন রুটজকি

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