Utf8mb4 के लिए character_set_client का मान सेट करें


12

मैं इस गाइड का utf8mb4पालन करने के लिए अपने DB को बदलने की कोशिश कर रहा हूं । मैंने सेट किया है:

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
init-connect='SET NAMES utf8mb4'
collation_server=utf8mb4_unicode_ci
character_set_server=utf8mb4
skip-character-set-client-handshake

लेकिन मूल्य character_set_clientऔर character_set_resultsअभी भी utf8mb4 में नहीं बदलेगा।

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8               |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8               |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+

मैं क्या गलत कर रहा हूं? मैं उन मानों को utf8mb4 पर कैसे सेट कर सकता हूं?

जवाबों:


14

प्रकटीकरण: मैं MySQL डेटाबेस में पूर्ण यूनिकोड का समर्थन करने के लिए लेखक हूं , आप जिस गाइड का अनुसरण कर रहे हैं।

  1. आपने संशोधित सेटिंग्स को कहाँ सहेजा है? जांचें mysqldकि डिफ़ॉल्ट विकल्प कहां से लोड होता है। यह आमतौर पर है /etc/my.cnf( जैसा कि गाइड में बताया गया है ) लेकिन यह आपके सिस्टम पर भिन्न हो सकता है। यह जानने के लिए निम्नलिखित कमांड चलाएँ:

    $ mysqld --help --verbose 2> /dev/null | grep -A1 'Default options'
    Default options are read from the following files in the given order:
    /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
  2. क्या आपने बदलाव करने के बाद mysqldदौड़ना शुरू किया mysqld restart?


1. मैंने इसमें परिवर्तन सहेजे हैं \xampp\mysql\bin\my.ini। मैं चलाने में असमर्थ था mysqld --help --verbose 2> /dev/null | grep -A1 'Default options'- जैसा कि यह निम्नलिखित त्रुटि देता है: 'grep' is not recognized as an internal or external command, operable program or batch file.मैं इस सामान के लिए नया हूं, इसलिए मैं कुछ गलत कर सकता हूं।
कव्वाज

2. मैंने mysqld को पुनः आरंभ किया, और इसके बाद मुझे निम्न चेतावनी दी: 2014-02-19 10:25:17 0 [चेतावनी] चरित्र-सेट-क्लाइंट-हैंडशेक के बजाय अद्वितीय विकल्प उपसर्ग character_set_client का उपयोग करना पदावनत किया गया है और हटा दिया जाएगा एक भविष्य के रिलीज में। कृपया इसके बजाय पूर्ण नाम का उपयोग करें। 2014-02-19 10:25:17 0 [चेतावनी] mysqld: अनदेखा विकल्प '--चैकर-सेट-क्लाइंट-हैंडशेक' अमान्य मान 'utf8mb4' के कारण
qwaz

1
skip-character-set-client-handshakeआपकी कॉन्फिग फाइल में क्यों है ? यह एक कमांड-लाइन विकल्प है, न कि एक चर।
मथियास ब्यानेन्स

1
मुझे स्थानीय सर्वर को फिर से स्थापित करना था; अपने गाइड के माध्यम से फिर से चला गया और सब कुछ काम किया। मैं आपकी प्रतिक्रिया और मदद की सराहना करता हूं। मैं आपके उत्तर पर वापस आऊंगा और जैसे ही मेरे पास ऐसा करने के लिए पर्याप्त प्रतिनिधि होंगे, इसे बढ़ा दूंगा।
क़्वाज़

3
मैं इस की कोशिश की, लेकिन अभी भी character_set_client, character_set_connection, character_set_results, collation_connectionके रूप में दिखाया गया है utf8। किसी भी विचार क्यों यह काम नहीं कर रहा है?
सरिता

2

मैंने भी उस गाइड का अनुसरण किया है, हालाँकि, वही मुद्दा फिर से दिखाई दिया। वास्तविक समस्या यह है कि डीबी बनाने के लिए कमांड में निहित है क्योंकि यह DEFAULT CHARACTERएक तर्क के रूप में लेता है और यदि इसे पारित नहीं किया जाता है, तो डिफ़ॉल्ट चरित्र सेट पारित किया जाता है जो कि नहीं है utfmb4

नीचे दिए गए चरण हैं जिन्हें मैंने इसे ठीक करने के लिए अनुसरण किया है:

  1. utf8mb4चरित्र सेट के साथ एक डमी डेटाबेस बनाएँ ।

    create database `your_db_name_dummy`
      DEFAULT CHARACTER SET utf8mb4
      DEFAULT COLLATE utf8mb4_unicode_ci;
  2. वास्तविक डेटाबेस से इस डमी डेटाबेस में वास्तविक संरचना और डेटा की प्रतिलिपि बनाएँ

    mysqldump -uroot -proot_password your_db_name | mysql -uroot -proot_password your_db_name_dummy

  3. वर्तमान डेटाबेस ड्रॉप करें

    SET FOREIGN_KEY_CHECKS=0;
    DROP DATABASE your_db_name;
  4. नया डेटाबेस बनाएँ

    create database `your_db_name`
      DEFAULT CHARACTER SET utf8mb4
      DEFAULT COLLATE utf8mb4_unicode_ci;
  5. अंत में, टेबल संरचना और डेटा को मूल डेटाबेस में वापस रखें

    mysqldump -uroot -proot_password your_db_name_dummy | mysql -uroot -proot_password your_db_name

यदि आप उपर्युक्त प्रक्रिया का उपयोग करने जा रहे हैं, तो कृपया नीचे उल्लेखित पंक्तियों को भी ध्यान से पढ़ें।

आवश्यक शर्तें और मेरी स्थिति:

  • बैकअप अपने सभी संरचना, डेटा, संग्रहीत कार्यविधियाँ, कार्य, ट्रिगर, आदि।
  • mysql --version Mysql Ver 14.14 डिस्ट्रिब्यूट 5.7.22, लिनक्स के लिए (x86_64) एडिटलाइन रैपर का उपयोग करते हुए

  • cat /etc/my.cnf

    [client]
    default-character-set = utf8mb4
    
    [mysql]
    default-character-set = utf8mb4
    
    [mysqld]
    character-set-client-handshake = FALSE
    character-set-server = utf8mb4
    init-connect = 'SET NAMES utf8mb4
    collation-server = utf8mb4_unicode_ci
  • मैं जावा क्लाइंट का उपयोग कर रहा हूं जो है 'mysql:mysql-connector-java:5.1.30'

  • मेरा कनेक्शन स्ट्रिंग है jdbc:mysql://ip.of.database:3306/your_db_name?zeroDateTimeBehavior=convertToNull&noAccessToProcedureBodies=true&autoReconnect=true
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.