এই প্রশ্নের ইতিমধ্যে প্রচুর উত্তর রয়েছে, তবে ম্যাথিয়াস ব্যেনেন্স উল্লেখ করেছেন যে ভাল ইউটিএফ -8 সমর্থন পাওয়ার জন্য 'utf8' এর পরিবর্তে 'utf8mb4' ব্যবহার করা উচিত ('utf8' 4 বাইট অক্ষর সমর্থন করে না, ক্ষেত্রগুলি সন্নিবেশে কাটা হয় )। আমি এটিকে একটি গুরুত্বপূর্ণ পার্থক্য হিসাবে বিবেচনা করি। সুতরাং এখানে ডিফল্ট অক্ষর সেট এবং কোলেশন কীভাবে সেট করবেন সে সম্পর্কে আরও একটি উত্তর। এমন একটি যা আপনাকে এক গাদা পো (💩) সন্নিবেশ করতে দেয়।
এটি মাইএসকিউএল 5.5.35 এ কাজ করে।
দ্রষ্টব্য, কিছু সেটিংস alচ্ছিক হতে পারে। যেহেতু আমি পুরোপুরি নিশ্চিত নই যে আমি কিছু ভুলে যাইনি, আমি এই উত্তরটি একটি সম্প্রদায়ের উইকি করব।
পুরানো সেটিংস
mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
কনফিগ
# 💩 𝌆
# UTF-8 should be used instead of Latin1. Obviously.
# NOTE "utf8" in MySQL is NOT full UTF-8: http://mathiasbynens.be/notes/mysql-utf8mb4
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4
নতুন সেটিংস
mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+----------------------+--------------------+
3 rows in set (0.00 sec)
character_set_system সবসময় UTF8 হয় ।
এটি বিদ্যমান সারণীগুলিকে প্রভাবিত করবে না, এটি কেবলমাত্র ডিফল্ট সেটিংস (নতুন টেবিলগুলির জন্য ব্যবহৃত)। নিম্নলিখিত অলটার কোডটি একটি বিদ্যমান টেবিলকে রূপান্তর করতে ব্যবহার করা যেতে পারে (ডাম্প-পুনরুদ্ধার কাজটি ছাড়াই):
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
সম্পাদনা:
একটি মাইএসকিউএল 5.0 সার্ভারে: অক্ষর_সেট_সামহক, অক্ষর_সেট_সংযোগ, চরিত্র_সেট_সিলটস, কোলেশন_ সংযোগ ল্যাটিন 1 এ রয়েছে। প্রদান SET NAMES utf8
(utf8mb4 যে সংস্করণে উপলব্ধ নয়) সেগুলিও utf8 এ সেট করে।
ক্যাভেট : আপনার যদি VrcAR (255) টাইপের সূচী কলাম সহ একটি utf8 টেবিল থাকে তবে এটি কিছু ক্ষেত্রে রূপান্তর করা যায় না, কারণ সর্বাধিক কী দৈর্ঘ্য ( Specified key was too long; max key length is 767 bytes.
) ছাড়িয়ে গেছে । যদি সম্ভব হয় তবে কলামের আকার 255 থেকে 191 এ কমিয়ে দিন (কারণ 191 * 4 = 764 <767 <192 * 4 = 768)। এর পরে, টেবিলটি রূপান্তর করা যায়।
utf8mb4
, অর্থাত্ ইউনিকোডের সম্পূর্ণ সমর্থন সহ বাস্তব UTF-8। মাইএসকিউএল ডেটাবেসগুলিতে কীভাবে পূর্ণ ইউনিকোড সমর্থন করবেন তা দেখুন ।