আমি এসকিউএল কোয়েরিতে কেস সংবেদনশীল অনুসন্ধান চাই। কিন্তু ডিফল্টরূপে, মাইএসকিউএল স্ট্রিংগুলির ক্ষেত্রে বিবেচনা করে না।
এসকিউএল কোয়েরিতে কীভাবে কেস কেসে সংবেদনশীল অনুসন্ধান করবেন সে সম্পর্কে কোনও ধারণা?
আমি এসকিউএল কোয়েরিতে কেস সংবেদনশীল অনুসন্ধান চাই। কিন্তু ডিফল্টরূপে, মাইএসকিউএল স্ট্রিংগুলির ক্ষেত্রে বিবেচনা করে না।
এসকিউএল কোয়েরিতে কীভাবে কেস কেসে সংবেদনশীল অনুসন্ধান করবেন সে সম্পর্কে কোনও ধারণা?
উত্তর:
ডিফল্টরূপে, মাইএসকিউএল স্ট্রিংগুলির ক্ষেত্রে বিবেচনা করে না
এটি বেশ সত্য নয়। আপনি যখনই create database
মাইএসকিউএল এ থাকবেন তখন ডাটাবেস / স্কিমাতে একটি অক্ষর সেট এবং একটি কোলেশন থাকে। প্রতিটি অক্ষর সেট একটি ডিফল্ট সমাহার আছে; আরও তথ্যের জন্য এখানে দেখুন।
অক্ষর সেটের জন্য ডিফল্ট কোলেশন latin1
, যা হ'ল latin1_swedish_ci
কেস-সংবেদনশীল হতে পারে।
আপনি কেস-সংবেদনশীল কোলেশন চয়ন করতে পারেন, উদাহরণস্বরূপ latin1_general_cs
( মাইএসকিউএল ব্যাকরণ ):
CREATE SCHEMA IF NOT EXISTS `myschema`
DEFAULT CHARACTER SET latin1
COLLATE latin1_general_cs ;
এটি গ্রুপিং এবং সমতার মতো জিনিসে প্রভাব ফেলে। উদাহরণ স্বরূপ,
create table casetable (
id int primary key,
thing varchar(50)
);
select * from casetable;
+----+-------+
| id | thing |
+----+-------+
| 3 | abc |
| 4 | ABC |
| 5 | aBc |
| 6 | abC |
+----+-------+
কেস-সংবেদনশীল ডাটাবেসে আমরা পাই:
select thing, count(*) from casetable group by thing;
+-------+----------+
| thing | count(*) |
+-------+----------+
| ABC | 1 |
| aBc | 1 |
| abC | 1 |
| abc | 1 |
+-------+----------+
select * from casetable where thing = "abc";
+----+-------+
| id | thing |
+----+-------+
| 3 | abc |
+----+-------+
কেস-সংবেদনশীল ডাটাবেসে থাকা অবস্থায় আমরা পাই:
select thing, count(*) from casetable group by thing;
+-------+----------+
| thing | count(*) |
+-------+----------+
| abc | 4 |
+-------+----------+
select * from casetable where thing = "abc";
+----+-------+
| id | thing |
+----+-------+
| 3 | abc |
| 4 | ABC |
| 5 | aBc |
| 6 | abC |
+----+-------+
মনে রাখবেন যে আপনি কোয়েরির মধ্যে থেকে কোলেশনটিও পরিবর্তন করতে পারেন । উদাহরণস্বরূপ, কেস- সংবেদনশীল ডাটাবেসে, আমি এটি করতে পারি
select * from casetable where thing collate latin1_swedish_ci = "abc";
+----+-------+
| id | thing |
+----+-------+
| 3 | abc |
| 4 | ABC |
| 5 | aBc |
| 6 | abC |
+----+-------+
আপনি মাইএসকিউএলের কোন সংস্করণ ব্যবহার করছেন তা আপনার প্রশ্নের সাথে সর্বদা আপনার উচিত, কারণ মাইএসকিউএল অবিচ্ছিন্ন বিকাশে রয়েছে।
ঠিক আছে, আপনার প্রশ্নে ফিরে:
মাইএসকিউএল মধ্যে স্ট্রিং ফাংশন যাতে আপনি ফাংশন কোনো ব্যবহার করতে পারে, কেস সংবেদনশীল সবসময় LOCATE
, POSITION
অথবা INSTR
।
উদাহরণ স্বরূপ:
SELECT phone FROM user WHERE POSITION('term' IN user_name)>0;
নিয়মিত প্রকাশ ( RLIKE
বা REGEXP
) এর সাথে মিলে যাওয়া প্যাটার্নটি সর্বদা নতুন 3.23.4 ব্যতীত মাইএসকিউএল এর সমস্ত সংস্করণের ক্ষেত্রে কেস সংবেদনশীল।
উদাহরণ স্বরূপ:
SELECT phone FROM user WHERE user_name REGEXP 'term';
স্বাভাবিক তুলনা (=) এবং এসকিউএল প্যাটার্ন মিলছে ( LIKE
) উভয়ের জন্য আচরণ জড়িত ক্ষেত্রগুলির উপর নির্ভর করে:
ক। CHAR
, VARCHAR
এবং সমস্ত পাঠ্য ক্ষেত্রের রূপগুলি সংবেদনশীলতার সাথে তুলনা করে।
খ। CHAR BINARY
, VARCHAR BINARY
এবং বিএলওবি ক্ষেত্রগুলির সমস্ত রূপগুলি কেস সংবেদনশীলকে তুলনা করে।
যদি আপনি (ক) থেকে কোনও ক্ষেত্রকে (খ) এর ক্ষেত্রের সাথে তুলনা করেন তবে তুলনাটি কেস সংবেদনশীল (কেস সংবেদনশীলতা জেতে) হবে। মাইএসকিউএল রেফারেন্স ম্যানুয়ালটির "7.2.7 স্ট্রিং ধরণের" অধ্যায়টি দেখুন এবং বাছাই এবং তুলনা সম্পর্কিত বিবৃতি সন্ধান করুন।
V3.23.0 দিয়ে শুরু করা BINARY
, জড়িত ক্ষেত্রগুলির প্রকারের চেয়ে আলাদা operatorালাই অপারেটরের সাথে কেস সংবেদনশীলতার তুলনায় জোর করা সম্ভব । মাইএসকিউএল রেফারেন্স ম্যানুয়ালটির "7.3.7 কাস্ট অপারেটর" অধ্যায়টি দেখুন।
সুতরাং আপনি ব্যবহারকারীর নামের ধরন বা V3.23.x এর সাহায্যে কিছু পরিবর্তন করতে পারেন:
SELECT phone FROM user WHERE BINARY username LIKE '%term%';
ইন আমার অবস্থা, আমি অ্যাক্সেস 2010 ব্যবহার করছি, কিন্তু আমি একই সমস্যা ছিল এখনো সমাধান আলাদা: ব্যবহার করুন StrComp()
ফাংশন এবং পরীক্ষা তার আগমন শূন্য যাবে।
StrComp( thing, 'abc', 0) = 0
কারণ প্রথম যুক্তি যদি "ছোট" হয়, যদি এটি "বৃহত্তর" হয় এবং যদি এটি "সমান" হয়, কখন , আপনার কেস-সংবেদনশীল মিল রয়েছে StrComp()
returns-1
1
0
StrComp()=0
অক্ষর সেট নির্বিশেষে এটি মাইএসকিউএলে কাজ করবে। ফলাফল হিসাবে নির্বাচন 'পরীক্ষা' রেগেক্সপ বাইনারি 'টেস্ট' নির্বাচন করুন; 'বিনারি' লাগানো বাইনারি তুলনা করতে বাধ্য করে।