মধ্যে utf8_general_ci
এবং utf8_unicode_ci
সেখানে কার্যকারিতা পদ কোন পার্থক্য আছে?
utf8[mb4]_unicode_ci
, আপনি আরও পছন্দ করতে পারেন utf8[mb4]_unicode_520_ci
।
utf8mb4_0900_ai_ci
।
মধ্যে utf8_general_ci
এবং utf8_unicode_ci
সেখানে কার্যকারিতা পদ কোন পার্থক্য আছে?
utf8[mb4]_unicode_ci
, আপনি আরও পছন্দ করতে পারেন utf8[mb4]_unicode_520_ci
।
utf8mb4_0900_ai_ci
।
উত্তর:
এই দুটি সমাহার উভয়ই ইউটিএফ -8 চরিত্রের এনকোডিংয়ের জন্য। পার্থক্যগুলি কীভাবে পাঠ্যকে সাজানো এবং তুলনা করা হয়।
দ্রষ্টব্য: মাইএসকিউএল এর utf8mb4
পরিবর্তে আপনাকে ব্যবহার করতে হবে utf8
। বিভ্রান্তিমূলকভাবে, utf8
প্রারম্ভিক মাইএসকিউএল সংস্করণগুলি থেকে একটি ত্রুটিযুক্ত ইউটিএফ -8 বাস্তবায়ন যা কেবল পশ্চাদপদ সামঞ্জস্যের জন্যই থেকে যায়। নির্দিষ্ট সংস্করণটির নাম দেওয়া হয়েছিল utf8mb4
।
দ্রষ্টব্য: মাইএসকিউএল এর নতুন সংস্করণগুলিতে ইউনিকোড বাছাইয়ের নিয়মগুলি আপডেট করা হয়েছে, যেমন utf8mb4_0900_ai_ci
ইউনিকোড 9.0 এর ভিত্তিতে সমতুল্য নিয়মের জন্য নাম অনুসারে উপলব্ধ - এবং কোনও সমমানের _general
বৈকল্পিক নেই। এখন এটি পড়তে থাকা লোকদের সম্ভবত হয় _unicode
বা এর পরিবর্তে এই নতুন কোলিশনের একটি ব্যবহার করা উচিত_general
। নীচে যা লিখিত রয়েছে তার বেশিরভাগটি এখন আর আগ্রহী নয় যদি আপনি তার পরিবর্তে আরও নতুন কোলিশান ব্যবহার করতে পারেন।
মূল পার্থক্য
utf8mb4_unicode_ci
সর্বজনীন বাছাই এবং তুলনা করার জন্য অফিশিয়াল ইউনিকোড নিয়মের উপর ভিত্তি করে তৈরি করা হয়েছে, যা বিভিন্ন বিস্তৃত ভাষায় নির্ভুলভাবে সাজায়।
utf8mb4_general_ci
গতির উন্নতির জন্য ডিজাইন করা অনেকগুলি শর্ট-কাট নেওয়ার সময় এটি করার পাশাপাশি লক্ষ্যগুলি বাছাইয়ের নিয়মের একটি সহজ সেট set এটি ইউনিকোড বিধি অনুসরণ করে না এবং এর ফলে কিছু পরিস্থিতিতে অনাকাঙ্ক্ষিত বাছাই বা তুলনা হয় যেমন নির্দিষ্ট ভাষা বা অক্ষর ব্যবহার করার সময়।
আধুনিক সার্ভারগুলিতে, এই পারফরম্যান্সের উত্সাহটি সমস্ত তুচ্ছ তবেই হবে। এটি এমন সময়ে তৈরি হয়েছিল যখন সার্ভারগুলির আজকের কম্পিউটারগুলির সিপিইউ পারফরম্যান্সের একটি ক্ষুদ্র ভগ্নাংশ ছিল।
utf8mb4_unicode_ci
ওভার উপকারিতাutf8mb4_general_ci
utf8mb4_unicode_ci
, যা বাছাই এবং তুলনা করার জন্য ইউনিকোড বিধিগুলি ব্যবহার করে, বিভিন্ন বিস্তৃত ভাষায় সঠিক বাছাই করার জন্য এবং বিস্তৃত বিশেষ অক্ষর ব্যবহার করার সময় একটি মোটামুটি জটিল অ্যালগরিদম নিয়োগ করে। এই বিধিগুলি ভাষা-নির্দিষ্ট কনভেনশনগুলিকে বিবেচনা করা প্রয়োজন; আমরা কী বর্ণনামূলক ক্রম বলব তার প্রত্যেকেই তাদের চরিত্রগুলি সাজান না।
লাতিন (যেমন "ইউরোপীয়") ভাষাগুলি যতদূর যায় ইউনিকোড বাছাই এবং utf8mb4_general_ci
মাইএসকিউএল সরলিকৃত বাছাইয়ের মধ্যে খুব বেশি পার্থক্য নেই, তবে এখনও কয়েকটি পার্থক্য রয়েছে:
উদাহরণস্বরূপ, ইউনিকোড কোলিশেশন "এসএস" এর মতো "ß", এবং "" "" ওই "এর মতো লোকেরা সাধারণত যে অক্ষরগুলি ব্যবহার করে লোকেরা চাইবে, সেখানে utf8mb4_general_ci
তাদের একক অক্ষর হিসাবে বাছাই করে (সম্ভবত যথাক্রমে" এস "এবং" ই "এর মতো) ।
কিছু ইউনিকোড অক্ষরকে অজ্ঞান হিসাবে সংজ্ঞায়িত করা হয় যার অর্থ তারা সাজানোর ক্রমের দিকে গণনা করা উচিত নয় এবং তুলনাটি পরবর্তী অক্ষরটির পরিবর্তে এগিয়ে যাওয়া উচিত। utf8mb4_unicode_ci
এগুলি সঠিকভাবে পরিচালনা করে
নন-লাতিন ভাষায় যেমন এশিয়ান ভাষা বা বিভিন্ন বর্ণমালা সম্বলিত ভাষাগুলিতে ইউনিকোড বাছাই এবং সরলিকৃত বাছাইয়ের মধ্যে আরও অনেক পার্থক্য থাকতে পারে utf8mb4_general_ci
। এর উপযুক্ততা utf8mb4_general_ci
ব্যবহৃত ভাষার উপর নির্ভর করবে। কিছু ভাষার ক্ষেত্রে এটি যথেষ্ট অপ্রতুল।
আপনার কি ব্যবহার করা উচিত?
অবশ্যই utf8mb4_general_ci
এখন আর ব্যবহার করার কোনও কারণ নেই, কারণ আমরা এমন পয়েন্টটি রেখে গেছি যেখানে সিপিইউর গতি যথেষ্ট কম যে পারফরম্যান্সের পার্থক্যটি গুরুত্বপূর্ণ। আপনার ডাটাবেস প্রায় নিশ্চিতভাবেই এর চেয়ে অন্য বাধা দ্বারা সীমাবদ্ধ থাকবে।
অতীতে, কিছু লোক utf8mb4_general_ci
যথাযথ বাছাই করা পারফরম্যান্স ব্যয়ের জন্য ন্যায্যতা অর্জনের জন্য যথেষ্ট গুরুত্বপূর্ণ যখন ব্যতীত ব্যবহার করার পরামর্শ দিয়েছিল । আজ, সেই কর্মক্ষমতা ব্যয়টি সমস্ত অদৃশ্য হয়ে গেছে এবং বিকাশকারীরা আন্তর্জাতিকীকরণকে আরও গুরুতরভাবে চিকিত্সা করছেন।
একটি যুক্তি তৈরি করার দরকার আছে যে গতি যদি নির্ভুলতার চেয়ে আপনার কাছে গুরুত্বপূর্ণ হয় তবে আপনি কোনওভাবে বাছাইও করতে পারেন না। আপনার যদি এটি সঠিক হওয়ার প্রয়োজন না হয় তবে দ্রুত একটি অ্যালগরিদম তৈরি করা তুচ্ছ। সুতরাং, utf8mb4_general_ci
একটি সমঝোতা যা সম্ভবত গতির কারণে প্রয়োজন হয় না এবং সম্ভবত নির্ভুলতার কারণেও উপযুক্ত নয়।
আরেকটি জিনিস আমি যুক্ত করব তা হল আপনি যদি জানেন যে আপনার অ্যাপ্লিকেশনটি কেবলমাত্র ইংরাজী ভাষা সমর্থন করে তবে এটির জন্য লোকজনের নামগুলি মোকাবেলা করতে হতে পারে, যা প্রায়শই অন্যান্য ভাষায় ব্যবহৃত অক্ষরগুলিতে থাকতে পারে যেখানে এটি সঠিকভাবে বাছাই করা যেমন গুরুত্বপূর্ণ । সব কিছুর জন্য ইউনিকোড নিয়ম ব্যবহার করা মানসিক প্রশান্তি যুক্ত করতে সহায়তা করে যে খুব স্মার্ট ইউনিকোড লোকেরা সঠিকভাবে বাছাইয়ের কাজটি করার জন্য খুব কঠোর পরিশ্রম করেছে।
পার্টস মানে কি
প্রথমত, ci
জন্য কেস-অবশ বাছাই এবং তুলনা। এর অর্থ এটি পাঠ্য ডেটার জন্য উপযুক্ত এবং কেসটি গুরুত্বপূর্ণ নয়। অন্যান্য ধরণের কোলেশন cs
হ'ল পাঠ্য তথ্যগুলির ক্ষেত্রে (কেস-সংবেদনশীল) যেখানে কেস গুরুত্বপূর্ণ, এবং bin
যেখানে এনকোডিংয়ের সাথে ম্যাচ করা প্রয়োজন, বিট বিট, যা ক্ষেত্রগুলির জন্য উপযুক্ত যা সত্যই এনকোডেড বাইনারি ডেটা (যেমন, উদাহরণস্বরূপ, করুন Base64-)। কেস-সংবেদনশীল বাছাই কিছু অদ্ভুত ফলাফলের দিকে নিয়ে যায় এবং কেস-সংবেদনশীল তুলনা কেবল বর্ণের ক্ষেত্রে ডুপ্লিকেট মানগুলিতে পৃথক হতে পারে, সুতরাং কেস-সংবেদনশীল কোলেশনগুলি পাঠ্য তথ্যের পক্ষে যায় না - যদি ক্ষেত্রেটি আপনার কাছে তাত্পর্যপূর্ণ হয় তবে অন্যথায় অবজ্ঞাপূর্ণ বিরামচিহ্ন otherwise এবং তাই সম্ভবত এটিও তাত্পর্যপূর্ণ এবং একটি বাইনারি কোলেশন আরও উপযুক্ত হতে পারে।
পরবর্তী, unicode
বা general
নির্দিষ্ট বাছাই এবং তুলনা বিধিগুলি উল্লেখ করে - বিশেষত, পাঠ্যকে যেভাবে সাধারণ করা হয় বা তুলনা করা হয়। Utf8mb4 চরিত্রের এনকোডিংয়ের জন্য নিয়মের অনেকগুলি সেট রয়েছে, যার সাথে unicode
এবং general
দু'টি হয়ে থাকে যা একটি নির্দিষ্টটির পরিবর্তে সমস্ত সম্ভাব্য ভাষায় ভালভাবে কাজ করার চেষ্টা করে। এই দুটি সেট নিয়মের মধ্যে পার্থক্য এই উত্তরের বিষয়। নোট যেটি unicode
ইউনিকোড ৪.০ থেকে বিধি ব্যবহার করে। মাইএসকিউএল এর সাম্প্রতিক সংস্করণগুলি unicode_520
ইউনিকোড 5.2 থেকে নিয়ম ব্যবহার করে এবং 0900
ইউনিকোড 9.0 থেকে নিয়ম ব্যবহার করে "" ইউনিকোড_ "অংশটি বাদ দিচ্ছে) যুক্ত করে rule
এবং সবশেষে, utf8mb4
অবশ্যই অভ্যন্তরীণভাবে অক্ষর এনকোডিং। এই উত্তরে আমি কেবল ইউনিকোড ভিত্তিক এনকোডিংগুলি নিয়েই কথা বলছি।
utf8_general_ci
: এটা শুধু কাজ করে না। পঞ্চাশ বছর আগে থেকে ASCII বোকামির খারাপ পুরানো দিনগুলিতে এটি থ্রোকব্যাক। ইউসিডি থেকে ফোল্ডকেস মানচিত্র ছাড়া ইউনিকোড কেস-সংবেদনশীল মিলটি করা যায় না। উদাহরণস্বরূপ, "Σίσυφος" এর মধ্যে তিনটি ভিন্ন সিগমাস রয়েছে; বা "টিএসসিএইচ" এর ছোট হাতের অক্ষরটি কীভাবে "tschüβ", তবে "tschüβ" এর বড় হাতের অক্ষরটি "TSCHÜSS"। আপনি সঠিক হতে পারেন, বা আপনি দ্রুত হতে পারেন। সুতরাং আপনাকে অবশ্যই ব্যবহার করতে হবে utf8_unicode_ci
, কারণ আপনি যদি নির্ভুলতার বিষয়ে চিন্তা করেন না, তবে এটিকে অনন্তর দ্রুততর করা তুচ্ছ।
"か" == "が"
বা ক্ষেত্রে যায় "ǽ" == "æ"
। বাছাইয়ের জন্য এটি বোঝা যায় তবে সমতার
utf8mb4
হয় শুধুমাত্র সঠিক পছন্দ । সঙ্গে utf8
আপনি UTF8 হওয়া কিছু মাইএসকিউএল শুধুমাত্র, 3-বাইট বৈকল্পিক আটকে আছে শুধুমাত্র মাইএসকিউএল (এবং MariaDB) কি না জানি যে। পৃথিবীর বাকি অংশগুলি ইউটিএফ 8 ব্যবহার করছে, এতে প্রতিটি চরিত্রে 4 টি বাইট থাকতে পারে । মাইএসকিউএল ডেভস তাদের হোমব্রিউ এনকোডিংয়ের ভুল নাম দিয়েছে utf8
এবং পশ্চাদপটে সামঞ্জস্যতা না ভাঙতে, তাদের এখন সত্যিকারের ইউটিএফ 8 উল্লেখ করতে হবে utf8mb4
।
আমি জানতে চেয়েছিলাম যে ব্যবহারের মধ্যে পারফরম্যান্সের পার্থক্য কী utf8_general_ci
এবং utf8_unicode_ci
আমি ইন্টারনেটে তালিকাভুক্ত কোনও মানদণ্ড খুঁজে পাইনি, তাই আমি নিজেই বেঞ্চমার্ক তৈরি করার সিদ্ধান্ত নিয়েছি।
আমি 500,000 সারি সহ একটি খুব সাধারণ টেবিল তৈরি করেছি:
CREATE TABLE test(
ID INT(11) DEFAULT NULL,
Description VARCHAR(20) DEFAULT NULL
)
ENGINE = INNODB
CHARACTER SET utf8
COLLATE utf8_general_ci;
তারপরে আমি এই সঞ্চিত পদ্ধতিটি চালিয়ে এলোমেলো ডেটা দিয়ে পূর্ণ করেছি:
CREATE PROCEDURE randomizer()
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE random CHAR(20) ;
theloop: loop
SET random = CONV(FLOOR(RAND() * 99999999999999), 20, 36);
INSERT INTO test VALUES (i+1, random);
SET i=i+1;
IF i = 500000 THEN
LEAVE theloop;
END IF;
END LOOP theloop;
END
তারপরে আমি নিম্নোক্ত সঞ্চিত প্রক্রিয়াগুলি সহজ SELECT
, এর SELECT
সাথে LIKE
এবং বাছাইয়ের সাথে (এর SELECT
মাধ্যমে ORDER BY
) মাপদণ্ডের জন্য তৈরি করেছি :
CREATE PROCEDURE benchmark_simple_select()
BEGIN
DECLARE i INT DEFAULT 0;
theloop: loop
SELECT *
FROM test
WHERE Description = 'test' COLLATE utf8_general_ci;
SET i = i + 1;
IF i = 30 THEN
LEAVE theloop;
END IF;
END LOOP theloop;
END;
CREATE PROCEDURE benchmark_select_like()
BEGIN
DECLARE i INT DEFAULT 0;
theloop: loop
SELECT *
FROM test
WHERE Description LIKE '%test' COLLATE utf8_general_ci;
SET i = i + 1;
IF i = 30 THEN
LEAVE theloop;
END IF;
END LOOP theloop;
END;
CREATE PROCEDURE benchmark_order_by()
BEGIN
DECLARE i INT DEFAULT 0;
theloop: loop
SELECT *
FROM test
WHERE ID > FLOOR(1 + RAND() * (400000 - 1))
ORDER BY Description COLLATE utf8_general_ci LIMIT 1000;
SET i = i + 1;
IF i = 10 THEN
LEAVE theloop;
END IF;
END LOOP theloop;
END;
উপরের সঞ্চিত পদ্ধতিতে utf8_general_ci
কোলেশন ব্যবহৃত হয়, তবে অবশ্যই পরীক্ষার সময় আমি utf8_general_ci
এবং উভয়ই ব্যবহার করি utf8_unicode_ci
।
আমি প্রতিটি সংগ্রহের জন্য প্রতিটি সঞ্চিত পদ্ধতি 5 বার কল করেছিলাম (5 বার utf8_general_ci
এবং এর জন্য 5 বার utf8_unicode_ci
) এবং তারপরে গড় মানগুলি গণনা করি calc
আমার ফলাফলগুলি হ'ল:
benchmark_simple_select()
utf8_general_ci
: 9,957 এমএস utf8_unicode_ci
: 10,271 এমএস এই বেঞ্চমার্কে ব্যবহারটি 3.2% এর utf8_unicode_ci
চেয়ে ধীর utf8_general_ci
হয়।
benchmark_select_like()
utf8_general_ci
: 11,441 এমএস utf8_unicode_ci
: 12,811 এমএস এই মানদণ্ডে 12% এর utf8_unicode_ci
চেয়ে ধীর গতিতে ব্যবহার করা হচ্ছে utf8_general_ci
।
benchmark_order_by()
utf8_general_ci
: 11,944 এমএস utf8_unicode_ci
: 12,887 এমএস এই মানদণ্ডে 7.9% এর utf8_unicode_ci
চেয়ে ধীর গতিতে ব্যবহার করা হচ্ছে utf8_general_ci
।
utf8_general_ci
ব্যবহারের পক্ষে খুব কম ন্যূনতম।
CONV(FLOOR(RAND() * 99999999999999), 20, 36)
কেবলমাত্র ASCII তৈরি হয়েছে, এবং কোলিশনের অ্যালগরিদম দ্বারা কোনও ইউনিকোড অক্ষর প্রক্রিয়া করা যায় না। 2) Description = 'test' COLLATE ...
এবং Description LIKE 'test%' COLLATE ...
রানটাইমে কেবলমাত্র একটি একক স্ট্রিং ("পরীক্ষা") প্রক্রিয়া করে, তাই না? 3) আসল অ্যাপ্লিকেশনগুলিতে, ক্রম অনুসারে ব্যবহৃত কলামগুলি সম্ভবত ইনডেক্স করা হবে এবং বাস্তব অ-ASCII পাঠ্য সহ বিভিন্ন কোলেশনগুলিতে সূচকের গতি আলাদা হতে পারে।
এই পোস্টটি এটি খুব সুন্দরভাবে বর্ণনা করে।
সংক্ষেপে: utf8_unicode_ci ইউনিকোড মান হিসাবে সংজ্ঞায়িত হিসাবে ইউনিকোড কলেশন আলগোরিদিম ব্যবহার করে, যেখানে utf8_general_ci একটি আরও সাধারণ সাজানোর ক্রম যা "কম নির্ভুল" সাজানোর ফলাফলের ফলাফল করে।
utf8_unicode_ci
অন্যটি ব্যবহার করুন এবং ভান করুন অন্যটি বিদ্যমান নেই।
utf8_general_ci
হতে পারে
মাইএসকিএল ম্যানুয়াল, ইউনিকোড ক্যারেক্টার সেটস বিভাগটি দেখুন:
যে কোনও ইউনিকোড চরিত্রের সেটের জন্য, _ জেনারাল_সি কোলেশন ব্যবহার করে সঞ্চালিত ক্রিয়াকলাপগুলি _ ইউনিকোড_সি কোলেশনগুলির চেয়ে দ্রুততর হয়। উদাহরণস্বরূপ, utf8_general_ci কোলেশন জন্য তুলনা দ্রুত, তবে কিছুটা কম সঠিক, utf8_unicode_ci এর তুলনা তুলনায়। এর কারণ হ'ল utf8_unicode_ci ম্যাপিংগুলিকে সম্প্রসারণের মতো সমর্থন করে; এটি হ'ল যখন একটি অক্ষর অন্যান্য অক্ষরের সংমিশ্রণের সমান হিসাবে তুলনা করে। উদাহরণস্বরূপ, জার্মান এবং কিছু অন্যান্য ভাষায় "ß" "ss" এর সমান। utf8_unicode_ci সংকোচনের এবং উপেক্ষাযোগ্য চরিত্রগুলিকেও সমর্থন করে। utf8_general_ci একটি উত্তরাধিকার সূচনা যা প্রসারণ, সংকোচনের বা অবজ্ঞাপূর্ণ চরিত্রগুলিকে সমর্থন করে না। এটি অক্ষরের মধ্যে কেবল এক থেকে একের তুলনা করতে পারে।
তাই সংক্ষেপ, utf_general_ci utf_unicode_ci চেয়ে তুলনা যা একটি ছোট এবং (আদর্শ অনুযায়ী) কম সঠিক সেট ব্যবহার করে উচিত সমগ্র মান বাস্তবায়ন। জেনারেল_সি সেটটি আরও দ্রুত হবে কারণ এর চেয়ে কম গণনা রয়েছে।
utf8_unicode_ci
বগি ভাঙা সংস্করণটি ব্যবহার করুন এবং ভান করুন।
0
এবং এর মধ্যে একটি আসল সংখ্যা 1
। :) ইজি একটি বাউন্ডিং বাক্সে জিও পয়েন্ট নির্বাচন করে 'নিকটবর্তী পয়েন্টগুলি' এর একটি অনুমান যা বিন্দু এবং রেফারেন্স পয়েন্টের মধ্যে দূরত্ব গণনা করা এবং এটিতে ফিল্টারিংয়ের মতো ভাল নয়। তবে উভয়ই একটি আনুমানিক এবং সত্যিকার অর্থে সম্পূর্ণ নির্ভুলতা অর্জনযোগ্য নয়। দেখুন তটরেখা প্যারাডক্স এবং আইইইই 754
1/3
সংক্ষিপ্ত কথায়:
আপনার যদি আরও ভাল বাছাইয়ের অর্ডার প্রয়োজন হয় - ব্যবহার করুন utf8_unicode_ci
(এটি পছন্দসই পদ্ধতি),
তবে আপনি যদি পারফরম্যান্সে পুরোপুরি আগ্রহী হন - ব্যবহার করুন utf8_general_ci
তবে জেনে রাখুন এটি কিছুটা পুরানো।
পারফরম্যান্সের ক্ষেত্রে পার্থক্যগুলি খুব সামান্য।
যেহেতু আমরা এখানে ( পিটার গুলুতজান ) পড়তে পারি পোলিশ বর্ণ "Ł" বাছাই / তুলনা করার ক্ষেত্রে পার্থক্য রয়েছে (স্ট্রোক সহ এল - এইচটিএমএল Ł
এসসি:) (লোয়ার কেস: "ł" - এইচটিএমএল এসসি ł
:) - আমাদের নিম্নলিখিত অনুমান রয়েছে:
utf8_polish_ci Ł greater than L and less than M
utf8_unicode_ci Ł greater than L and less than M
utf8_unicode_520_ci Ł equal to L
utf8_general_ci Ł greater than Z
পোলিশ ভাষায় চিঠির Ł
পরে L
এবং তার আগে থাকে M
। এই কোডিং এর কোনওটিই ভাল বা খারাপ নয় - এটি আপনার প্রয়োজনের উপর নির্ভর করে।
বাছাই এবং চরিত্রের মিল দুটি বড় পার্থক্য:
বাছাই করা হচ্ছে :
utf8mb4_general_ci
সমস্ত অ্যাকসেন্টগুলি সরিয়ে দেয় এবং একে একে বাছাই করে যা ভুল সাজানোর ফলাফল তৈরি করতে পারে।utf8mb4_unicode_ci
সঠিক প্রকারের।চরিত্রের মিল
তারা চরিত্রগুলি আলাদাভাবে মেলে।
উদাহরণস্বরূপ, আপনার মধ্যে utf8mb4_unicode_ci
আছে i != ı
, কিন্তু utf8mb4_general_ci
এটি ধারণ করে ı=i
।
উদাহরণস্বরূপ, কল্পনা করুন যে আপনার সাথে একটি সারি রয়েছে name="Yılmaz"
। তারপর
select id from users where name='Yilmaz';
যদি সংঘর্ষ হয় তবে সারিটি ফিরিয়ে দেবে utf8mb4_general_ci
, তবে এটির সাথে সংঘবদ্ধ হলে সারিটি ফিরে utf8mb4_unicode_ci
আসবে না !
অন্যদিকে আমরা যে আছে উপর a=ª
এবং ß=ss
মধ্যে utf8mb4_unicode_ci
যা ঘটনা না utf8mb4_general_ci
। তাই আপনি যদি সাথে মনোমালিন্য হয়েছে কল্পনা name="ªßi"
, তারপর
select id from users where name='assi';
সংঘর্ষ হলে সারিটি ফিরিয়ে দেবে utf8mb4_unicode_ci
, তবে সংঘর্ষ সেট করা থাকলে একটি সারি ফেরত দেবে নাutf8mb4_general_ci
।
প্রতিটি সংঘর্ষের জন্য ম্যাচের একটি সম্পূর্ণ তালিকা এখানে পাওয়া যাবে ।
এই পোস্ট অনুসারে, utf8mb4_unicode_ci এর স্থলে utf8mb4_general_ci ব্যবহার করার সময় মাইএসকিউএল ৫. on-তে যথেষ্ট বড় পারফরম্যান্স সুবিধা রয়েছে: https://www.percona.com/blog/2019/02/27/charset-and-collation-settings-impact -on-MySQL ক্ষমতা সম্পন্ন /