MyCnf में MySQL डिफॉल्ट कैरेक्टर को UTF-8 में बदलें?


334

वर्तमान में हम अपने एप्लिकेशन में UTF-8 में सेट वर्ण सेट करने के लिए PHP में निम्न कमांड का उपयोग कर रहे हैं ।

चूंकि यह ओवरहेड का एक सा है, हम इसे MySQL में डिफ़ॉल्ट सेटिंग के रूप में सेट करना चाहते हैं। क्या हम इसे /etc/my.cnf या किसी अन्य स्थान पर कर सकते हैं?

SET NAMES 'utf8'
SET CHARACTER SET utf8

मैंने /etc/my.cnf में एक डिफ़ॉल्ट चारसेट की तलाश की है, लेकिन वहाँ वर्णमाला के बारे में कुछ भी नहीं है।

इस बिंदु पर, मैंने यूटीएफ -8 को MySQL चारसेट और कॉलेशन चर सेट करने के लिए निम्न कार्य किया:

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

क्या इससे निपटने का एक सही तरीका है?


19
ध्यान दें कि एक बेहतर डिफ़ॉल्ट होगा utf8mb4, यानी पूर्ण यूनिकोड समर्थन के साथ वास्तविक UTF-8। MySQL डेटाबेस में पूर्ण यूनिकोड का समर्थन करने का तरीका देखें ।
मथियास बीनेंस

@Jorre आप इसे बदलने के लिए आपत्ति utf8mb4करेंगे यह एक खतरनाक मिसाल कायम करने की तरह है क्योंकि यह बैठता है?
इवान कैरोल

जवाबों:


424

डिफ़ॉल्ट को UTF-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

यदि आप किसी मौजूदा DB के लिए सेट किए गए वर्ण को बदलना चाहते हैं, तो मुझे बताएं ... आपके प्रश्न ने इसे सीधे निर्दिष्ट नहीं किया है इसलिए मुझे यकीन नहीं है कि आप क्या करना चाहते हैं।


18
उपरोक्त my.cnf सेटिंग्स ने मेरे लिए भी काम किया। इसके अतिरिक्त, मुझे यह सुनिश्चित करना था कि तालिका को ठीक से सेट किया गया था, जैसे कि परिवर्तन सारणी को Tableचार्ट करने के लिए सेट करें utf8 COLLATE utf8_unicode_ci;
क्रिस लिवडहल

8
Mysql 5.5 के लिए काम नहीं करता है। मैंने इस्तेमाल किया: <br/> [mysqld] # utf-8 collation-server के लिए परिवर्तन = utf8mb4_unicode_ci init-connect = 'SET NAMES utf8mb4' वर्ण-सेट-सर्वर = utf8mb4 और utf8mb4 अन्यत्र जैसा कि ऊपर उल्लेख किया गया है।
Champ

12
उबंटू 12.04 पर, यह मेरे लिए काम करता है - अगर मैंने इसके बाद पहली पंक्ति को हटा दिया [mysqld]
ब्रैंडन बर्टेल्सन

4
ऐसा लगता है कि डिफ़ॉल्ट-चरित्र-सेट को अब [mysqld] अनुभाग में नहीं देखा जा सकता है
मार्सबर्ड

4
ध्यान दें कि यदि UTF-8 आप चाहते हैं, तो MySQL के utf8चारसेट का उपयोग न करें । इसके बजाय उपयोग करें utf8mb4
मथियास बिएनेंस

255

MySQL के हालिया संस्करण के लिए,

default-character-set = utf8

एक समस्या का कारण बनता है। मुझे लगता है कि यह पदावनत है।

जैसा कि जस्टिन बॉल कहते हैं " MySQL 5.5.12 में अपग्रेड करें और अब MySQL शुरू नहीं होगा , आपको यह करना चाहिए:

  1. उस निर्देश को हटा दें और आपको अच्छा होना चाहिए।

  2. तब आपकी कॉन्फ़िगरेशन फ़ाइल ('/etc/my.cnf' उदाहरण के लिए) इस तरह दिखनी चाहिए:

    [mysqld]
    collation-server = utf8_unicode_ci
    init-connect='SET NAMES utf8'
    character-set-server = utf8
    
  3. MySQL को पुनरारंभ करें।

  4. यह सुनिश्चित करने के लिए, आपका MySQL UTF-8 है, अपने MySQL प्रॉम्प्ट में निम्न क्वेरीज़ चलाएँ:

    • पहली क्वेरी:

       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 |
       +----------------------+-----------------+
      

क्या आपकी पहली लाइन max_allowed_packet = 64M किसी भी तरह से इस UTF8 मुद्दे से संबंधित है?
मल्हल

मेरे पास है 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
सेंड

मुझे लगता है कि आपको हटाने की आवश्यकता नहीं है default-character-set, इसके बजाय आप बदल सकते हैं loose-default-character-set = utf8- यानी, 'लूज-' के साथ उपसर्ग। यह mysqlbinlogखुश करता है , अगर आपको इसका उपयोग करने की आवश्यकता है - Google के लिए: "ढीला-डिफ़ॉल्ट-वर्ण-सेट" mysqlbinlog
KajMagnus

क्या init-connect='SET NAMES utf8'वास्तव में आवश्यक है? यदि नहीं तो हम निश्चित रूप से प्रदर्शन के लिए इसके बिना कर सकते हैं।
datasn.io

56

इस प्रश्न के पहले से ही बहुत सारे उत्तर हैं, लेकिन माथियास ब्यनेंस ने उल्लेख किया है कि बेहतर यूटीएफ -8 का समर्थन करने के लिए 'यूटीएफ 8' के बजाय 'यूटीएफ 8 एम 4' का इस्तेमाल किया जाना चाहिए ('यूटीएफ 8' 4 बाइट वर्णों का समर्थन नहीं करता है, खेतों को सम्मिलित रूप से काट दिया जाता है) )। मैं इसे एक महत्वपूर्ण अंतर मानता हूं। इसलिए यहाँ पर एक और जवाब है कि कैसे डिफ़ॉल्ट चरित्र सेट और टकराव को सेट किया जाए। एक जो आपको पू (।) का ढेर लगाने की अनुमति देगा।

यह MySQL 5.5.35 पर काम करता है।

ध्यान दें, कि कुछ सेटिंग्स वैकल्पिक हो सकती हैं। जैसा कि मुझे पूरी तरह से यकीन नहीं है कि मैं कुछ भी नहीं भूल गया हूं, मैं इस जवाब को एक सामुदायिक विकि बनाऊंगा।

पुरानी सेटिंग्स

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;

संपादित करें:

MySQL 5.0 सर्वर पर: character_set_client, character_set_connection, character_set_results, collation_connection latin1 पर रहता है। जारी करना SET NAMES utf8(उस संस्करण में उपलब्ध नहीं utf8mb4) उन utf8 के लिए भी सेट करता है।


कैविएट : यदि आपके पास VARCHAR (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_databaseutf8_bin` है। क्या मैं कुछ भुल गया?
स्टीवर्ट

जो मिला, उसे याद किया। उन 2 सेटिंग्स को सेट किया जाता है जब डेटाबेस खुद बनाया जाता है। यह प्रश्न देखें; stackoverflow.com/questions/22572558/…
स्टीवर्ट

1
character-set-client-handshake = FALSE[mysqld] अनुभाग में जोड़ें , इसलिए यह हमेशा डिफ़ॉल्ट एन्कोडिंग का उपयोग करेगा भले ही आप आवेदन परत पर गलती करेंगे
लुकास लिसिसिस

नमस्ते मैं इस समाधान की कोशिश की है, लेकिन अभी भी मैं character_set_client नहीं दिखा सकता हूँ | utf8mb4। यह utf8 है। बस character_set_database utf8mb4 और character_set_server utf8mb4 utf8mb4 हैं अन्य नहीं बदले गए। कृपया मेरी मदद करें
भाविन चौहान

@ baic6 मैं सुझाव देता हूं कि एक नोट जोड़कर स्पष्ट किया जाए कि केवल अनुक्रमित कॉलम ही समस्या का कारण बन सकता है। 767 बाइट्स सीमा केवल अनुक्रमित कॉलम के लिए है, "कुंजी" s के लिए सीमा कोज़ करें। सामान्य रूप से गैर-अनुक्रमित स्तंभों के लिए, यह लागू नहीं होता है। यदि किसी कॉलम में अधिकतम बाइट लंबाई के साथ मान है, तो 255 वर्णों और utf8 के अधिकतम 3 बाइट्स का उपयोग किया गया था, फिर भी इसे केवल 255 * 3 बाइट्स की आवश्यकता होगी, इन मामलों में utf8mb4 केवल 3-बाइट्स का उपयोग करेगा, क्योंकि utf8mb4 में भी ये वर्ण हैं केवल 3 बाइट्स की जरूरत है। वह तब तक है, जब तक कि utf8 में फिट होने वाला कोई वर्ण स्तंभ में संग्रहीत नहीं किया गया था, जिस स्थिति में जानकारी पहले से ही खो गई है।
सैम

55

MySQL 5.5 पर मेरे पास my.cnf है

[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
@Simon, जब show variables like "%collation%";मैं का उपयोग कर रहा था 'collation_connection' के रूप में utf8_general_ciऔर collation_database और collation_server के रूप में देख रहा था utf8_unicode_ci। लाइन को जोड़ने से skip-character-set-client-handshakeसामान्य प्रविष्टि को यूनिकोड में बदल दिया गया था , इसलिए तीनों सुसंगत थे।
वघानी

2
MySQL 5.6 पर, स्किप-कैरेक्टर-सेट-क्लाइंट-हैंडशेक वो नहीं करता जो @Vaughany ने कहा था। कोई उपाय?
अबाबेह ए

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

NijCat करीब था, लेकिन निर्दिष्ट ओवरकिल:

डिफ़ॉल्ट को UTF-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
अच्छा उत्तर। हो सकता है कि कुछ हिस्सों के बारे में एक संक्षिप्त व्याख्या लोगों को अपने विन्यास में वास्तव में वही तय करने में मदद करे जो वे चाहते हैं।
माइक शमूएल

@ डेरेक, [mysql] default-character-set=utf8फिर क्या करता है?
पचेरियर

1
[क्लाइंट] विकल्प समूह पहले से ही सभी MySQL क्लाइंट के लिए विकल्प सेट करता है जो my.cnf फ़ाइल को पढ़ते हैं। [Mysql] समूह विशेष रूप से "mysql" क्लाइंट बाइनरी के लिए विकल्प सेट करता है। यदि आप एक mysql विकल्प सेट करना चाहते हैं जो अन्य ग्राहकों पर लागू नहीं होता है, तो इस समूह का उपयोग करना उचित है, लेकिन दोनों स्थानों में समान विकल्प मान को सेट करना निरर्थक है। dev.mysql.com/doc/refman/5.6/en/option-files.html
डेरेक

@ माइक शमूएल, डिफ़ॉल्ट चरित्र को utf8 पर सेट करने का तात्पर्य पहले से ही utf8_general_ci के डिफ़ॉल्ट टक्कर मोड से है। दूसरी ओर, "init-connect = 'SET NAMES 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], MySQL 5.5.x Ubuntu 12.04 (सटीक पैंगोलिन) के तहत शुरू नहीं होगा ।


16
यह MySQL बग # 52047 है । के तहत [mysqld], आपको character-set-serverइसके बजाय का उपयोग करना चाहिए default-character-set। (अत्यंत भ्रमित, मैं सहमत हूँ!)
मथियास बीनेंस

हाँ। 5.0 में पदावनत; 5.5 में हटा दिया गया।
रिक जेम्स

22

MySQL 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

Xubuntu 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 की भी आवश्यकता है अन्यथा जब आप कमांड लाइन पर mysql का उपयोग करते हैं तो यह यूआरएफ 8 का उपयोग नहीं करेगा जो संभवतः आपके द्वारा फाइल करने वाले किसी भी बैकअप को नष्ट कर देगा।
मल्हल

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 |
+----------------------+-----------------+

और यह तब है जब आप गैर-सुपर उपयोगकर्ता के रूप में जुड़ते हैं !

उदाहरण के लिए, सुपर और गैर-सुपर उपयोगकर्ता के रूप में कनेक्शन के बीच का अंतर (बेशक 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
काश, मैं आपके लिंक किए गए लेख को पढ़ सकता, लेकिन रूसी और Google अनुवाद को नहीं पढ़ सकता जो तकनीकी ग्रंथों के लिए उपयोगी नहीं है। हालांकि मैं यह बता सकता हूं कि यह बहुत दिलचस्प होगा। क्या आप कृपया अंग्रेजी संस्करण पोस्ट करने पर विचार करेंगे?
मार्टिज़न हेमेल्स

2
क्या आप बता सकते हैं कि कौन सी सेटिंग सुपर उपयोगकर्ता कनेक्शन कोलाज सेट करने में विफल रहती है? (और वहाँ एक समाधान है)
KCD

@gahcep, आपने कहा कि आप utf8_unicode_ciप्रदर्शन के मुद्दों के कारण उपयोग करते हैं, फिर, utf8_binइसके बजाय उपयोग क्यों नहीं करते ?
पचेरियर

हाय, पसेरीर। अच्छी बात। अब मुझे यकीन नहीं है कि अगर मेरी पसंद का उपयोग करने के बारे में सही था utf8_unicode_ci। प्रदर्शन का परीक्षण करने में कभी समय नहीं लगाया।
गहसीप


4

कॉन्फ़िगरेशन बनाते समय MySQL संस्करण और लिनक्स वितरण मायने रख सकते हैं।

हालांकि, [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]

यह collation_connection को 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_database & collation_server को प्रभावित करेगा

collation-server=utf8_unicode_ci

क्षमा करें, मुझे यकीन नहीं है कि यह किस लिए है। हालांकि मैं इसका उपयोग नहीं करता हूं:

skip-character-set-client-handshake

प्रलेखन नोटों कि character_set_serverमैन्युअल रूप से सेट नहीं किया जाना चाहिए।
ब्रायन

तो अत्याधुनिक दृष्टिकोण क्या है? character setडेटाबेस कनेक्शन की स्थापना करते समय हम स्पष्ट रूप से पास कर सकते हैं , हालांकि थोड़ा कष्टप्रद लगता है।
लीहंग ली

दरअसल मैंने एक गलती की। दस्तावेज़ कहते हैं कि character_set_database को गतिशील रूप से सेट नहीं किया जाना चाहिए। Character_set_server का उल्लेख नहीं करता है। हालाँकि, मुझे यकीन नहीं है कि आपको character_set_server के बारे में चिंता करने की ज़रूरत है, क्योंकि मुझे लगता है कि यह केवल नए बनाए गए डेटाबेस के लिए डिफ़ॉल्ट मान को प्रभावित करता है?
ब्रायन

मैं उपर्युक्त और मैं प्रयोग फिर से अभी-अभी किया है, के रूप में character_set_serverमें [mysqld]खंड को प्रभावित करेगा character_set_databaseऔर character_set_server। अब मुझे लगता है कि एक अच्छा व्यवहार स्पष्ट रूप से इंगित करना है character setकि आप डेटाबेस, टेबल और डेटाबेस कनेक्शन बनाते समय उपयोग करना चाहते हैं। ईमानदारी से कहूं तो, प्रलेखन mysqlआसानी से समझ में नहीं आता है। क्या आप जानते हैं कि 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

MySQL 5.5, आप सभी की जरूरत है:

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

collation_server वैकल्पिक है।

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

यदि आपको MySQL कार्यक्षेत्र का उपयोग करके ग्राहक के चरित्र-निर्धारित समर्थन की पुष्टि करने में समस्या हो रही है, तो निम्नलिखित नोट को ध्यान में रखें:

MySQL वर्कबेंच द्वारा खोले गए महत्वपूर्ण सभी कनेक्शन स्वचालित रूप से utf8 के क्लाइंट सेट को सेट करते हैं। मैन्युअल रूप से क्लाइंट कैरेक्टर सेट को बदलना, जैसे कि सेट नाम का उपयोग ..., MySQL वर्कबेंच को सही ढंग से वर्ण प्रदर्शित नहीं करने का कारण हो सकता है। क्लाइंट वर्ण सेट के बारे में अतिरिक्त जानकारी के लिए, कनेक्शन वर्ण सेट और कोलाज़ देखें।

इस प्रकार मैं My.cnf परिवर्तनों के साथ MySQL कार्यक्षेत्र के वर्ण सेट को ओवरराइड करने में असमर्थ था। जैसे 'सेट नाम utf8mb4'


1

यदि आप क्लाइंट के लिए अपनी सेटिंग से भ्रमित हैं और mysql सेवा को पुनरारंभ करने के बाद कॉन को रीसेट कर दिया गया है। इन चरणों का प्रयास करें (जो मेरे लिए काम करते हैं):

  1. vi /etc/my.cnf
  2. सामग्री झटका और जोड़ें :wq [client] character-sets-dir=/usr/local/mysql/share/mysql/charsets
  3. mysql को पुनरारंभ करें और mysql को लॉगिन करें, डेटाबेस, इनपुट कमांड का उपयोग करें, status;आपको 'क्लाइंट' के लिए कैरेक्टर-सेट मिलेगा और 'con' को 'utf8' पर सेट करना है।

अधिक जानकारी के लिए संदर्भ देखें ।


0

आप इसे वैसे ही कर सकते हैं, और अगर यह काम नहीं करता है, तो आपको mysql को पुनरारंभ करना होगा।


-1

MySQL वर्ण बदलें:

ग्राहक

default-character-set=utf8

mysqld

character_set_server=utf8

हमें default-character-set=utf8mysqld में नहीं लिखना चाहिए , क्योंकि इसके परिणामस्वरूप त्रुटि हो सकती है:

शुरू: नौकरी शुरू करने में विफल

अंत में:

 +--------------------------+----------------------------+
 | 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/ |
 +--------------------------+----------------------------+
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.