MySQL-এ ডিফল্ট কোলেশন (যেমন utf8_general_ci) এ ñ এবং n সমান মনে হয়। স্পেনিশ কোলেশন utf8_spanish_ci ব্যবহার করলে ñ আলাদা অক্ষর হিসেবে চেনা হয়।
সমস্যা
CREATE TABLE not_include_n_demo (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
client_name VARCHAR(20)
);
INSERT INTO not_include_n_demo (client_name) VALUES ('John'), ('Johñ'), ('Johnñy');
SELECT * FROM not_include_n_demo WHERE client_name LIKE '%ñ%';
ডিফল্ট কোলেশন আউটপুট (৩ সারি রিটার্ন — ভুল)
+----+------------+
| id | client_name|
+----+------------+
| 1 | John | -- 'n' মেলেছে 'ñ'-এর সাথে
| 2 | Johñ |
| 3 | Johnñy |
+----+------------+
সমাধান: utf8_spanish_ci কোলেশন ব্যবহার
SELECT * FROM not_include_n_demo
WHERE client_name LIKE '%ñ%' COLLATE utf8_spanish_ci;
সঠিক আউটপুট (২ সারি)
+----+------------+
| id | client_name|
+----+------------+
| 2 | Johñ |
| 3 | Johnñy |
+----+------------+
কোলেশন পার্থক্য
| কোলেশন | n vs ñ | ব্যবহার |
|---|---|---|
| utf8_general_ci | সমান (=) | জেনারেল Zweck |
| utf8_spanish_ci | ভিন্ন (≠) | স্পেনিশ ভাষা |
| utf8_spanish2_ci | ভিন্ন (ঐতিহ্যবাহী স্পেনিশ সর্টিং) | পুরানো স্পেনিশ |
টেবিল/কলাম লেভেলে কোলেশন সেট
-- কলাম লেভেলে
CREATE TABLE t (name VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_spanish_ci);
-- টেবিল লেভেলে
CREATE TABLE t (name VARCHAR(20)) CHARACTER SET utf8 COLLATE utf8_spanish_ci;
অন্যান্য ভাষার জন্য
- জার্মান:
utf8_german2_ci(ß vs ss আলাদা) - সুইডিশ:
utf8_swedish_ci - টার্কিশ:
utf8_turkish_ci(i vs ı আলাদা)