মাইএসকিউএল-র ডিফল্ট অক্ষরটি মাই সিএনএফ-তে ইউটিএফ -8 এ সেট করুন?


334

বর্তমানে আমরা আমাদের অ্যাপ্লিকেশনটিতে ইউটিএফ -8 এ অক্ষর সেট করতে পিএইচপি-তে নিম্নলিখিত কমান্ডগুলি ব্যবহার করছি ।

যেহেতু এটি কিছুটা ওভারহেড, তাই আমরা এটি মাইএসকিউএলে ডিফল্ট সেটিংস হিসাবে সেট করতে চাই। আমরা কি এটি /etc/my.cnf বা অন্য কোনও জায়গায় করতে পারি?

SET NAMES 'utf8'
SET CHARACTER SET utf8

আমি /etc/my.cnf এ একটি ডিফল্ট চরসেটের সন্ধান করেছি, তবে অক্ষরগুলি সম্পর্কে কিছুই নেই।

এই মুহুর্তে, আমি মাইএসকিউএল চরসেট এবং কোলেশন ভেরিয়েবলগুলি ইউটিএফ -8 এ সেট করার জন্য নিম্নলিখিতগুলি করেছি:

skip-character-set-client-handshake
character_set_client=utf8
character_set_server=utf8

এটি হ্যান্ডেল করার কি এটি সঠিক উপায়?


19
মনে রাখবেন যে আরও ভাল ডিফল্ট হবে utf8mb4, অর্থাত্ ইউনিকোডের সম্পূর্ণ সমর্থন সহ বাস্তব UTF-8। মাইএসকিউএল ডেটাবেসগুলিতে কীভাবে পূর্ণ ইউনিকোড সমর্থন করবেন তা দেখুন ।
ম্যাথিয়াস বাইনেন্স

@ জোরে আপনি কি এটি পরিবর্তন করে আপত্তি করবেন এটি বসার সাথে সাথে utf8mb4একটি বিপজ্জনক নজির স্থাপন করা কি দয়া করে?
ইভান ক্যারল

উত্তর:


424

ডিফল্টটিকে ইউটিএফ -8 এ সেট করতে, আপনি নিম্নলিখিতটি my.cnf এ যুক্ত করতে চান

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

আপনি যদি কোনও বিদ্যমান ডিবি-র জন্য চরিত্রের সেটটি পরিবর্তন করতে চান তবে আমাকে জানান ... আপনার প্রশ্নটি সরাসরি এটি নির্দিষ্ট করে নি তাই আপনি যা করতে চান তা নিশ্চিত কিনা আমি নিশ্চিত নই।


18
উপরের my.cnf সেটিংস আমার জন্যও কাজ করেছিল। অধিকন্তু, আমাকে অবশ্যই টেবিলটি Tableঠিকঠাকভাবে সেট করা আছে তা নিশ্চিত করতে হয়েছিল, যেমন অক্ষর সেট করতে ALT TABLE CONVERT to CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ক্রিস লিভডাহাল

8
মাইএসকিএল 5.5 এর জন্য কাজ করে না। আমি ব্যবহার করেছি: <br/> [মাইএসকিএলডি] # উল্লিখিত হিসাবে utf-8 কোলেশন-সার্ভার = utf8mb4_unicode_ci init-সংযুক্ত = 'সেট নামস utf8mb4' অক্ষর-সেট-সার্ভার = utf8mb4 এবং utf8mb4 এর জন্য # পরিবর্তন।
চ্যাম্প

12
উবুন্টু 12.04-এ, এটি আমার পক্ষে কাজ করেছে - যদি আমি পরে প্রথম লাইনটি সরিয়ে ফেলি তবে [mysqld]
ব্র্যান্ডন বার্টেলসেন

4
দেখে মনে হচ্ছে ডিফল্ট-চরিত্র-সেটটি আর [মাইএসকিএলডি] বিভাগে অনুমোদিত নয়
মার্সবার্ড

4
মনে রাখবেন যে ইউটিএফ -8 আপনি যা চান তা যদি হয় তবে মাইএসকিউএল এর utf8অক্ষর ব্যবহার করবেন না । পরিবর্তে ব্যবহার utf8mb4করুন।
ম্যাথিয়াস বাইনেস

255

মাইএসকিউএল এর সাম্প্রতিক সংস্করণের জন্য,

default-character-set = utf8

একটি সমস্যার কারণ। আমি মনে করি এটি অবহেলিত।

জাস্টিন বল যেমন " মাইএসকিউএল 5.5.12 এ আপগ্রেড করুন এবং এখন মাইএসকিউএল শুরু হবে না , তেমনটি আপনার উচিত:

  1. সেই নির্দেশটি সরান এবং আপনার ভাল হওয়া উচিত।

  2. তারপরে আপনার কনফিগারেশন ফাইলটি ('/etc/my.cnf' উদাহরণস্বরূপ) দেখতে এমন হওয়া উচিত:

    [mysqld]
    collation-server = utf8_unicode_ci
    init-connect='SET NAMES utf8'
    character-set-server = utf8
  3. মাইএসকিউএল পুনরায় চালু করুন।

  4. নিশ্চিত করার জন্য, আপনার মাইএসকিউএলটি ইউটিএফ -8, আপনার মাইএসকিউএল প্রম্পটে নিম্নলিখিত প্রশ্নগুলি চালান:

    • প্রথম জিজ্ঞাসা:

       mysql> show variables like 'char%';

      ফলাফলটি দেখতে হবে:

       +--------------------------+---------------------------------+
       | Variable_name            | Value                           |
       +--------------------------+---------------------------------+
       | character_set_client     | utf8                            |
       | character_set_connection | utf8                            |
       | character_set_database   | utf8                            |
       | character_set_filesystem | binary                          |
       | character_set_results    | utf8                            |
       | character_set_server     | utf8                            |
       | character_set_system     | utf8                            |
       | character_sets_dir       | /usr/local/mysql/share/charsets/|
       +--------------------------+---------------------------------+
    • দ্বিতীয় প্রশ্ন:

       mysql> show variables like 'collation%';

      এবং ক্যোয়ারী আউটপুটটি হ'ল:

       +----------------------+-----------------+
       | Variable_name        | Value           |
       +----------------------+-----------------+
       | collation_connection | utf8_general_ci |
       | collation_database   | utf8_unicode_ci |
       | collation_server     | utf8_unicode_ci |
       +----------------------+-----------------+

আপনার প্রথম লাইনটি কীভাবে কোনওভাবেই এই ইউটিএফ 8 ইস্যুটির সাথে সম্পর্কিত_প্যাকেট = 64 এম সম্পর্কিত?
ম্যালহাল

আমি character_set_filesystem | utf8। আমি নিশ্চিত নই, ঠিক আছে তো?
চাচা লেম

1
মারিয়াডিবি v5.5 এ চেষ্টা করা হয়েছে এবং এটি কাজ করে, ধন্যবাদ! mysql Ver 15.1 Distrib 5.5.35-MariaDB, for debian-linux-gnu (x86_64) using readline 5.1
cenk

আমি মনে করি আপনাকে অপসারণের দরকার নেই default-character-set, পরিবর্তে আপনি এতে পরিবর্তন করতে পারবেন loose-default-character-set = utf8- অর্থাত্ 'আলগা' দিয়ে উপসর্গ করুন। এটি mysqlbinlogআপনাকে খুশি করে তোলে , যদি আপনার এটির প্রয়োজন হয় - গুগলের জন্য: "আলগা-ডিফল্ট-অক্ষর-সেট" মাইএসকিএলব্লিনগ
কাজম্যাগনাস

কি init-connect='SET NAMES utf8'সত্যিই প্রয়োজনীয়? না হলে আমরা অবশ্যই পারফরম্যান্সের জন্য এটি ছাড়া করতে পারি।
datasn.io

56

এই প্রশ্নের ইতিমধ্যে প্রচুর উত্তর রয়েছে, তবে ম্যাথিয়াস ব্যেনেন্স উল্লেখ করেছেন যে ভাল ইউটিএফ -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)। এর পরে, টেবিলটি রূপান্তর করা যায়।


আমি আপনার সেটিংস অনুসরণ করেছি, কিন্তু আমি character_set_databaseএখনও আছে utf8এবং collation_databaseহয় utf8_bin find। আমি কি কিছু রেখে গেলাম?
স্টিয়ার্ট

আমি যা মিস করেছি তা পেয়েছি। এই 2 সেটিংস সেট করা থাকে যখন ডাটাবেস নিজেই তৈরি হয়। এই প্রশ্নটি দেখুন; stackoverflow.com/questions/22572558/…
স্টুয়ার্ট

1
যোগ character-set-client-handshake = FALSE[mysqld] বিভাগটি, তাই এটা সবসময় আপনি আবেদন স্তরে ভুল করা হবে ডিফল্ট এমনকি এনকোডিং ব্যবহার করবে
লুকাস Liesis

হাই আমি এই সমাধানটি চেষ্টা করেছি তবে এখনও আমি অক্ষর_সেট_স্লায়েন্টটি প্রদর্শন করতে পারি না utf8mb4। এটা utf8। শুধু ক্যারেক্টার_সেট_ডিটাবেস utf8mb4 এবং ক্যারেক্টার_সেট_সার্ভার utf8mb4 অন্যান্য ইউএফএফ 8 এমবি 4 পরিবর্তন হয় নি। দয়া করে আমাকে সহায়তা করুন
ভবিন চৌহান

@ বাইাইক I আমি কেবল সূচিযুক্ত কলামগুলি কেন সমস্যার কারণ হতে পারে তা পরিষ্কার করে একটি নোট যুক্ত করার পরামর্শ দিই। 767 বাইট সীমাবদ্ধতা কেবলমাত্র ইনডেক্সড কলামগুলির জন্য, "কী" গুলি এর সীমাবদ্ধতা কোজ করুন। সাধারণভাবে ইনডেক্সড কলামগুলির জন্য, এটি প্রযোজ্য নয়। যদি কোনও কলামের সর্বাধিক বাইট দৈর্ঘ্যের মান থাকে, বলুন 255 টি অক্ষর এবং সর্বোচ্চ 3 বাইট ইউটিএফ 8 ব্যবহার করা হত তবে এখনও কেবল 255 * 3 বাইটের প্রয়োজন হবে, এই ক্ষেত্রে utf8mb4 কেবল 3-বাইট ব্যবহার করবে, যেমন utf8mb4-তে এই অক্ষরগুলিও রয়েছে মাত্র 3 বাইট প্রয়োজন এটি হ'ল, যদি না কোনও চরিত্র যা utf8-তে ফিট না করে তবে কলামে তথ্য সংরক্ষণ করা হয়নি যদি তথ্য ইতিমধ্যে হারিয়ে যায়।
সাম

55

মাইএসকিউএল 5.5 এ আমার মাই সিএনএফ আছে

[mysqld] 
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

ফলাফল হয়

mysql> show variables like "%character%";show variables like "%collation%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

2
skip-character-set-client-handshakeঠিক কী এবং কোন পরিস্থিতিতে এটির প্রয়োজন হয়?
সাইমন পূর্ব

3
@ সিমন, ব্যবহার করার সময় show variables like "%collation%";আমি 'কোলেশন_সংযোগ' utf8_general_ciএবং কোলিশেশন_ডেটবেস এবং কোলেশন_সভার হিসাবে হিসাবে দেখছিলাম utf8_unicode_ci। লাইন যুক্ত করা skip-character-set-client-handshakeসাধারণ প্রবেশকে ইউনিকোডে পরিবর্তন করেছে, তাই তিনটিই সামঞ্জস্যপূর্ণ ছিল।
ওয়াঘানি

2
মাইএসকিউএল ৫..6-এ, স্কিপ-ক্যারেক্টার-সেট-ক্লায়েন্ট-হ্যান্ডশেক @ ভাগানি যা বলেছে তা করে না। যেকোনো পরামর্শ?
আব্বনেহ এ

4
skip-character-set-client-handshakeতা আমার জন্য ( "চরিত্র সেট-সার্ভার" এবং "কোলেশন-সার্ভার", অবশ্যই সহ - ডেবিয়ান 7)। init_connectগুলি সহ বা ছাড়া একটি পার্থক্য করতে পারে না skipএবং অপ্রয়োজনীয় বলে মনে হচ্ছে। +1 এবং আপনাকে ধন্যবাদ।
জেফ

3
স্কিপ-চরিত্র-সেট-ক্লায়েন্ট-হ্যান্ডশেক ক্লায়েন্টের দ্বারা প্রেরিত অক্ষর সেট তথ্য উপেক্ষা করে। যোগাযোগের সময় নির্দিষ্ট চরিত্র সেট করার জন্য এটি দুর্দান্ত, তবে ক্লায়েন্ট যদি অন্য কিছু আশা করে, তবে এটি সমস্যার কারণ হতে পারে। আমি বলব আপনি ক্লায়েন্ট (আপনার অ্যাপ্লিকেশন) এ এটি নির্দিষ্ট করে দেওয়া ভাল।
0b10011

31

দ্রষ্টব্য: my.cnf ফাইলটি এখানে অবস্থিত/etc/mysql/

এই লাইনগুলি যুক্ত করার পরে:

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
skip-character-set-client-handshake

[client]
default-character-set   = utf8

[mysql]
default-character-set   = utf8

সার্ভার পুনরায় চালু করতে ভুলবেন না:

sudo service mysql restart

2
দ্রষ্টব্য: এটি ডিফল্ট পরিবর্তন করে; এটি কোনও বিদ্যমান কলামগুলির জন্য এনকোডিং পরিবর্তন করে না
রিক জেমস

24

নিজ্যাট গুগল ছিল তবে নির্দিষ্ট ওভারকিল:

ডিফল্টটিকে ইউটিএফ -8 এ সেট করতে, আপনি নিম্নলিখিতটি my.cnf এ যুক্ত করতে চান

[client]
default-character-set=utf8

[mysqld]
default-character-set = utf8

তারপরে, যাচাই করতে:

mysql> show variables like "%character%";show variables like "%collation%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| 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   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

5
চমৎকার উত্তর. কোন অংশগুলি ওভারকিল রয়েছে সে সম্পর্কে একটি সংক্ষিপ্ত বিবরণ লোকদের তাদের কনফিগারেশনে ঠিক কী চান তা ঠিক করতে সহায়তা করবে।
মাইক স্যামুয়েল 21

@ ডেরেক, [mysql] default-character-set=utf8তারপরে কী করবে ?
পেসারিয়ার

1
[ক্লায়েন্ট] বিকল্প গ্রুপটি ইতিমধ্যে সমস্ত মাইএসকিউএল ক্লায়েন্টের জন্য অপশন সেট করে যা মাই সিএনএফ ফাইলটি পড়ে। [মাইএসকিএল] গোষ্ঠীটি কেবল "মাইএসকিএল" ক্লায়েন্ট বাইনারিগুলির জন্য বিশেষভাবে বিকল্পগুলি সেট করে। আপনি যদি এমন কোনও মাইএসকিএল বিকল্প সেট করতে চান যা অন্যান্য ক্লায়েন্টদের জন্য প্রযোজ্য না, এই গোষ্ঠীটি ব্যবহার করা উপযুক্ত, তবে উভয় স্থানে একই বিকল্পের মান নির্ধারণ করা অপ্রয়োজনীয়। dev.mysql.com/doc/refman/5.6/en/option-files.html
ডেরেক

@ মাইক স্যামুয়েল, ডিফল্ট অক্ষরটি utf8 এ সেট করা ইতিমধ্যে utf8_general_ci এর ডিফল্ট কলাইজেশন মোডকে বোঝায়। অন্যদিকে, "init-সংযুক্ত = 'সেট নামস utf8'" কিছুটা আকর্ষণীয় ধারণা, কারণ এটি সার্ভারের সাথে সংযুক্ত সমস্ত ক্লায়েন্টকে utf8 ব্যবহার করতে বাধ্য করার চেষ্টা করে, তবে এটি সংযোগের সংযোগ সুবিধার উপর নির্ভর করে অসামঞ্জস্যভাবে প্রয়োগ করা হয় ব্যবহারকারী এবং আমি সন্দেহ করি যে সার্ভার তাদের অনুরোধ করা চরসেটটি ওভাররাইড করলে কিছু সংযোগকারী তৃতীয় পক্ষের ক্লায়েন্ট বিভ্রান্ত হতে পারে। dev.mysql.com/doc/refman/5.6/en/charset-applications.html
ডেরেক

জন্য [mysqld]ব্যবহার character-set-serverপরিবর্তেdefault-character-set
রিক জেমস

23

আমিও জানতে পেরেছি নির্ধারণের পরে default-character-set = utf8অধীনে [mysqld]শিরোনাম, মাইএসকিউএল 5.5.x অধীনে শুরু হচ্ছে না উবুন্টু 12.04 (সঠিক প্যাঙ্গোলিন)।


16
এটি মাইএসকিউএল বাগ # 52047 । এর অধীনে [mysqld], আপনার character-set-serverপরিবর্তে ব্যবহার করা উচিত default-character-set। (অত্যন্ত বিভ্রান্তিকর, আমি সম্মত!)
ম্যাথিয়াস বাইনেস

হ্যাঁ. 5.0 এ অবচয়; 5.5 এ সরানো হয়েছে।
রিক জেমস

22

মাইএসকিউএল v5.5.3 এবং আরও বেশি:

কেবলমাত্র [mysqld] বিভাগে তিনটি লাইন যুক্ত করুন:

[mysqld]
character-set-server = utf8
collation-server = utf8_unicode_ci
skip-character-set-client-handshake

দ্রষ্টব্য: সহ skip-character-set-client-handshakeএখানে উভয় অন্তর্ভুক্ত করা প্রয়োজন obviates init-connectমধ্যে [mysqld]এবং default-character-setমধ্যে [client]এবং [mysql]বিভাগে।


1
বাহ, এই প্রশ্নের অনেকগুলি সদৃশ উত্তর এবং এখনও এটি সবচেয়ে সহজ বলে মনে হচ্ছে। এছাড়াও v5.5.44 এ আমার জন্য কাজ করে।
জাস্টিন ওয়াট

9

জুবুন্টু 12.04 এর অধীনে আমি কেবল যুক্ত করেছি

[mysqld]
character_set_server = utf8

/etc/mysql/my.cnf

এবং ফলাফল হয়

mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| 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   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

এছাড়াও http://dev.mysql.com/doc/refman/5.6/en/charset-server.html দেখুন


আপনার [ক্লায়েন্ট] ডিফল্ট-অক্ষর-সেট = utf8 প্রয়োজন অন্যথায় আপনি যখন কমান্ড লাইনে মাইএসকিএল ব্যবহার করেন এটি utf8 ব্যবহার করবে না আপনি ফাইলের জন্য পাইপযুক্ত কোনও ব্যাকআপ ধ্বংস করে।
ম্যালাল

9

এখানে তালিকাভুক্ত সমস্ত সেটিংস সঠিক, তবে এখানে সর্বাধিক অনুকূল এবং পর্যাপ্ত সমাধান:

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci

[client]
default-character-set = utf8

এগুলিতে যুক্ত করুন /etc/mysql/my.cnf

দয়া করে মনে রাখবেন, আমি পারফরম্যান্স সমস্যার কারণে utf8_unicode_ci ধরণের কোলেশন বেছে নিই

ফলাফল হলো:

mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

আপনি যখন নন-সুপার ব্যবহারকারী হিসাবে সংযোগ করেন তখন এটি হয় !

উদাহরণস্বরূপ, SUPER এবং নন-সুপার ব্যবহারকারী হিসাবে সংযোগের মধ্যে পার্থক্য (অবশ্যই utf8_unicode_ci কোলেশন ক্ষেত্রে ):

সুপার বেসরকারী ব্যবহারকারী :

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci | <---
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

নন-সুপার বেসরকারী ব্যবহারকারী :

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

আপনার একটি বা অন্য বিকল্প কেন ব্যবহার করা উচিত সে সম্পর্কে বিশদ বর্ণনা করে আমি একটি বিস্তৃত নিবন্ধ (rus) লিখেছিলাম । সমস্ত ধরণের ক্যারেক্টার সেট এবং কোলেশন বিবেচনা করা হয়: সার্ভারের জন্য, ডাটাবেসের জন্য, সংযোগের জন্য, টেবিলের জন্য এমনকি কলামের জন্যও।

আমি আশা করি এটি এবং নিবন্ধটি অস্পষ্ট মুহুর্তগুলি স্পষ্ট করতে সহায়তা করবে।


3
আমি আশা করি আমি আপনার লিঙ্কযুক্ত নিবন্ধটি পড়তে পারি, তবে রাশিয়ান এবং গুগল অনুবাদ পড়তে পারি না প্রযুক্তিগত পাঠগুলির জন্য এটি সহায়ক নয়। আমি যা বলতে পারি তা থেকে যদিও এটি খুব আকর্ষণীয় হবে। আপনি একটি ইংরেজি সংস্করণ পোস্ট বিবেচনা করতে পারেন?
মার্টিজন হিমেলস

2
আপনি কী ব্যাখ্যা করতে পারেন যে কোন সেটিংটি সুপার ব্যবহারকারী সংযোগের কোলেশন সেট করতে ব্যর্থ হয়েছে? (এবং এর কোনও সমাধান রয়েছে)
কেসিডি

@ গাহসেপ, আপনি বলেছিলেন যে আপনি utf8_unicode_ciপারফরম্যান্স সম্পর্কিত সমস্যার কারণে ব্যবহার করেছেন, তবে utf8_binপরিবর্তে কেন ব্যবহার করবেন না?
পেসারিয়ার

হাই, পেসারিয়ার ভাল যুক্তি. এখন আমি নিশ্চিত না যে আমার পছন্দটি ব্যবহারের ক্ষেত্রে সঠিক ছিল কিনা utf8_unicode_ci। পারফরম্যান্স পরীক্ষার জন্য কখনই সময় ব্যয় করিনি।
gahcep


4

কনফিগারেশন করার সময় মাইএসকিউএল সংস্করণ এবং লিনাক্স বিতরণে গুরুত্বপূর্ণ হতে পারে matter

তবে [mysqld]বিভাগের অধীনে পরিবর্তনগুলি উত্সাহিত করা হয়।

আমি তোমাজলেন্ডারের উত্তরের একটি সংক্ষিপ্ত ব্যাখ্যা দিতে চাই:

[mysqld] 
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

[Mysqld]

এটি কোলেশন_সংযোগটি utf8_unicode_ci এ পরিবর্তন করবে

init_connect='SET collation_connection = utf8_unicode_ci'

ব্যবহার SET NAMES:

init_connect='SET NAMES utf8'

সেট নামগুলি তিনটি অক্ষরকে প্রভাবিত করবে, তা হ'ল:

character_set_client
character_set_results
character_set_connection

এটি সেট করা হবে character_set_database & character_set_server

character-set-server=utf8

এটি কেবল কোলেশন_ডেটবেস এবং কোলেশন_সার্ভারকেই প্রভাবিত করবে

collation-server=utf8_unicode_ci

দুঃখিত, আমি এতটা নিশ্চিত নই যে এটি কীসের জন্য। আমি তবে এটি ব্যবহার করি না:

skip-character-set-client-handshake

ডকুমেন্টেশন নোট যে character_set_serverনিজে সেট না করা উচিত।
ব্রায়ান

অতএব অত্যাধুনিক পদ্ধতির কী? character setডাটাবেস সংযোগ স্থাপনের সময় আমরা স্পষ্টভাবে পাস করতে পারি , তবে কিছুটা বিরক্তিকর দেখাচ্ছে।
লিহাং লি

আসলে আমি একটা ভুল করেছি। ডকুমেন্টেশনগুলিতে বলা হয়েছে যে অক্ষর_সেট_ডাটাবেস গতিশীলভাবে সেট করা উচিত নয়। চরিত্র_সেট_সার্ভার উল্লেখ করে না। তবে, আমি নিশ্চিত নই যে আপনার চরিত্র_সেট_সার্ভার সম্পর্কে চিন্তা করা দরকার, যেহেতু আমি মনে করি এটি কেবল নতুন তৈরি হওয়া ডাটাবেসের জন্য ডিফল্ট মানকেই প্রভাবিত করে?
ব্রায়ান

আমি পূর্বেই উল্লেখ করা এবং আমি পরীক্ষা আবার এইমাত্র করেনি হিসেবে character_set_server[mysqld]অধ্যায় প্রভাবিত করবে character_set_databaseএবং character_set_server। এখন আমি মনে করি একটি ভাল অনুশীলন হ'ল character setডেটাবেস, একটি টেবিল এবং ডাটাবেস সংযোগ তৈরি করার সময় আপনি যেটি ব্যবহার করতে চান তা স্পষ্টভাবে নির্দেশ করে । সত্যি বলতে, ডকুমেন্টেশন mysqlএত সহজে বোঝা যায় না। আপনি কী জানেন যে মাইএসকিএল-এ সমস্ত সেটিংস character setএবং collationসেটিংস সম্পন্ন করার জেনেরিক উপায় আছে কিনা ?
লিহং লি

4

ফেডোরায় 21

$ vi /etc/my.cnf

অনুসরণ করুন:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

সংরক্ষণ এবং ত্যাগ.

ফাইনাল পুনর্সূচনা সেবা mysqld স্মরণ service mysqld restart


1

মাইএসকিউএল 5.5, আপনার যা যা প্রয়োজন তা হ'ল:

[mysqld]
character_set_client=utf8
character_set_server=utf8
collation_server=utf8_unicode_ci

collation_server alচ্ছিক।

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

1

মাইএসকিউএল ওয়ার্কবেঞ্চ ব্যবহার করে ক্লায়েন্টের চরিত্র-সেট সমর্থন নিশ্চিত করতে আপনার যদি সমস্যা হয় তবে নিম্নলিখিত নোটটি মাথায় রাখুন:

গুরুত্বপূর্ণ মাইএসকিউএল ওয়ার্কবেঞ্চ দ্বারা খোলার সমস্ত সংযোগ স্বয়ংক্রিয়ভাবে ক্লায়েন্টের অক্ষর সেটআপ utf8 তে সেট করে। ম্যানুয়ালি ক্লায়েন্টের চরিত্র সেট যেমন SET নাম ব্যবহার করা ... এর পরিবর্তে মাইএসকিউএল ওয়ার্কবেঞ্চ অক্ষরগুলি সঠিকভাবে প্রদর্শন না করার কারণ হতে পারে। ক্লায়েন্টের অক্ষর সেটগুলি সম্পর্কে অতিরিক্ত তথ্যের জন্য, সংযোগ চরিত্রের সেট এবং সমাহার দেখুন।

সুতরাং আমি মাইএসকিউএল ওয়ার্কবেঞ্চের চরিত্রের সেটগুলিকে মাই সিএনএফ পরিবর্তনের সাথে ওভাররাইড করতে পারিনি। যেমন 'নামগুলি utf8mb4' সেট করুন


1

আপনি যদি ক্লায়েন্ট এবং সংযোগের জন্য আপনার সেটিং দ্বারা বিভ্রান্ত হন তবে পুনরায় আরম্ভ করা মাইএসকিএল পরিষেবা পরে পুনরায় সেট করা হয়। এই পদক্ষেপগুলি চেষ্টা করুন (যা আমার জন্য কাজ করেছিল):

  1. vi /etc/my.cnf
  2. ব্লক করুন এবং :wq [client] character-sets-dir=/usr/local/mysql/share/mysql/charsets
  3. মাইএসকিএল এবং লগইন মাইএসকিএল পুনরায় চালু করুন, ডাটাবেস, ইনপুট কমান্ড ব্যবহার করুন status;, আপনি 'ক্লায়েন্ট' এর জন্য অক্ষর-সেটটি পাবেন এবং 'সংযোগ' 'utf8' তে সেট করা আছে।

আরও তথ্যের জন্য রেফারেন্স পরীক্ষা করুন ।


0

আপনি এটি এটি যেমনভাবে করতে পারেন, এবং যদি এটি কাজ না করে তবে আপনাকে মাইএসকিএল পুনরায় চালু করতে হবে।


-1

মাইএসকিউএল চরিত্র পরিবর্তন করুন:

মক্কেল

default-character-set=utf8

mysqld

character_set_server=utf8

আমাদের default-character-set=utf8মাইএসকিএলডে লেখা উচিত নয় , কারণ এর ফলে একটি ত্রুটি হতে পারে:

শুরু: কাজ শুরু করতে ব্যর্থ

অবশেষে:

 +--------------------------+----------------------------+
 | Variable_name            | Value                      |
 +--------------------------+----------------------------+
 | character_set_client     | utf8                       |
 | character_set_connection | utf8                       |
 | character_set_database   | utf8                       |
 | character_set_filesystem | binary                     |
 | character_set_results    | utf8                       |
 | character_set_server     | utf8                       |
 | character_set_system     | utf8                       |
 | character_sets_dir       | /usr/share/mysql/charsets/ |
 +--------------------------+----------------------------+
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.