डिफ़ॉल्ट वर्ण_सेट_सेवर लैटिन 1 क्यों है?


12

मैं MySQL 5.5 का उपयोग कर रहा हूं और जब मैं चारसेट के बारे में चर दिखाता हूं, तो मेरे पास है

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

क्या मुझे character_set_databaseऔर character_set_serverको बदलने की आवश्यकता है utf8?

जवाबों:


8

इसके बारे में सोचो:

  • आप डेटाबेस में डेटा संग्रहीत कर रहे हैं latin1
  • आप डेटा के रूप में mysqld द्वारा आंतरिक रूप से नियंत्रित किया जाता है latin1

यदि ओएस से या कनेक्शन से आने वाला डेटा है utf8, तो mysqld इसका इलाज कैसे करेगा?

सबसे अच्छा अनुमान लगाने या उम्मीद करने के बजाय, आप आने वाले चरित्र सेट व्यवहार को बदल सकते हैं। के अपवाद के साथ information_schemaऔर mysql, अपने सभी डेटाबेस ले और तयशुदा चरित्र को सेट करें utf8:

ALTER DATABASE dbname CHARACTER SET utf8;

यदि आपके पास इसके साथ जाने के लिए एक विशिष्ट टकराव है, तो यह करें:

ALTER DATABASE dbname COLLATE 'utf8_general_ci';

यहां से चुनने के लिए कोलाज हैं:

mysql> select * from information_schema.collations where CHARACTER_SET_NAME = 'utf8';
+--------------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME     | CHARACTER_SET_NAME | ID  | IS_DEFAULT | IS_COMPILED | SORTLEN |
+--------------------+--------------------+-----+------------+-------------+---------+
| utf8_general_ci    | utf8               |  33 | Yes        | Yes         |       1 |
| utf8_bin           | utf8               |  83 |            | Yes         |       1 |
| utf8_unicode_ci    | utf8               | 192 |            | Yes         |       8 |
| utf8_icelandic_ci  | utf8               | 193 |            | Yes         |       8 |
| utf8_latvian_ci    | utf8               | 194 |            | Yes         |       8 |
| utf8_romanian_ci   | utf8               | 195 |            | Yes         |       8 |
| utf8_slovenian_ci  | utf8               | 196 |            | Yes         |       8 |
| utf8_polish_ci     | utf8               | 197 |            | Yes         |       8 |
| utf8_estonian_ci   | utf8               | 198 |            | Yes         |       8 |
| utf8_spanish_ci    | utf8               | 199 |            | Yes         |       8 |
| utf8_swedish_ci    | utf8               | 200 |            | Yes         |       8 |
| utf8_turkish_ci    | utf8               | 201 |            | Yes         |       8 |
| utf8_czech_ci      | utf8               | 202 |            | Yes         |       8 |
| utf8_danish_ci     | utf8               | 203 |            | Yes         |       8 |
| utf8_lithuanian_ci | utf8               | 204 |            | Yes         |       8 |
| utf8_slovak_ci     | utf8               | 205 |            | Yes         |       8 |
| utf8_spanish2_ci   | utf8               | 206 |            | Yes         |       8 |
| utf8_roman_ci      | utf8               | 207 |            | Yes         |       8 |
| utf8_persian_ci    | utf8               | 208 |            | Yes         |       8 |
| utf8_esperanto_ci  | utf8               | 209 |            | Yes         |       8 |
| utf8_hungarian_ci  | utf8               | 210 |            | Yes         |       8 |
| utf8_sinhala_ci    | utf8               | 211 |            | Yes         |       8 |
+--------------------+--------------------+-----+------------+-------------+---------+
22 rows in set (0.03 sec)

तुम भी दौड़ सकते थे

mysql> show collation where charset='utf8';
+--------------------+---------+-----+---------+----------+---------+
| Collation          | Charset | Id  | Default | Compiled | Sortlen |
+--------------------+---------+-----+---------+----------+---------+
| utf8_general_ci    | utf8    |  33 | Yes     | Yes      |       1 |
| utf8_bin           | utf8    |  83 |         | Yes      |       1 |
| utf8_unicode_ci    | utf8    | 192 |         | Yes      |       8 |
| utf8_icelandic_ci  | utf8    | 193 |         | Yes      |       8 |
| utf8_latvian_ci    | utf8    | 194 |         | Yes      |       8 |
| utf8_romanian_ci   | utf8    | 195 |         | Yes      |       8 |
| utf8_slovenian_ci  | utf8    | 196 |         | Yes      |       8 |
| utf8_polish_ci     | utf8    | 197 |         | Yes      |       8 |
| utf8_estonian_ci   | utf8    | 198 |         | Yes      |       8 |
| utf8_spanish_ci    | utf8    | 199 |         | Yes      |       8 |
| utf8_swedish_ci    | utf8    | 200 |         | Yes      |       8 |
| utf8_turkish_ci    | utf8    | 201 |         | Yes      |       8 |
| utf8_czech_ci      | utf8    | 202 |         | Yes      |       8 |
| utf8_danish_ci     | utf8    | 203 |         | Yes      |       8 |
| utf8_lithuanian_ci | utf8    | 204 |         | Yes      |       8 |
| utf8_slovak_ci     | utf8    | 205 |         | Yes      |       8 |
| utf8_spanish2_ci   | utf8    | 206 |         | Yes      |       8 |
| utf8_roman_ci      | utf8    | 207 |         | Yes      |       8 |
| utf8_persian_ci    | utf8    | 208 |         | Yes      |       8 |
| utf8_esperanto_ci  | utf8    | 209 |         | Yes      |       8 |
| utf8_hungarian_ci  | utf8    | 210 |         | Yes      |       8 |
| utf8_sinhala_ci    | utf8    | 211 |         | Yes      |       8 |
+--------------------+---------+-----+---------+----------+---------+
22 rows in set (0.00 sec)

mysql>

डेटाबेस को अलग-अलग चलाने के लिए इसे देखें:

mysql> show create database sample;
+----------+-------------------------------------------------------------------+
| Database | Create Database                                                   |
+----------+-------------------------------------------------------------------+
| sample   | CREATE DATABASE `sample` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

सेटिंग्स के लिए, आप यह कोशिश कर सकते हैं:

इसमें लाइनें जोड़ें my.cnf

[mysqld]
character_set_database=utf8
character_set_server=utf8

फिर mysql को पुनरारंभ करें

मैंने 01 अगस्त, 2011 को इस पर चर्चा की: कैरेक्टर सेट एनकोडिंग इन ए टेबल

CAVEAT (विंडोज में MySQL DB सर्वर के लिए)

ये आज्ञा

ALTER DATABASE dbname CHARACTER SET utf8;
ALTER DATABASE dbname COLLATE 'utf8_general_ci';

जिस तरह से विंडोज में फाइलें लॉक होने के कारण MySQL के विंडोज वर्जन में काम नहीं करते हैं। आवश्यक फ़ाइल को कहा जाता है db.optजो डेटाबेस सबफ़ोल्डर में स्थित है datadir

आपको निम्न कार्य करने पड़ सकते हैं:

  • उस डेटाबेस को mysqldump (कोई डेटाबेस जानकारी नहीं बनाता है, बस तालिका निर्माण और INSERTs)
  • उस डेटाबेस को छोड़ दें
  • विशिष्ट चारसेट और कॉलेशन के साथ डेटाबेस बनाएं
  • इसे डंप में फिर से लोड करें

उपसंहार

कोई फर्क नहीं पड़ता कि आप क्या करते हैं, कृपया देव / मंचन सर्वर पर कोई भी परिवर्तन करें ताकि आप वांछित प्रभाव पा सकें

UPDATE 2012-12-05 11:00 EDT

आपके सवाल

क्या मुझे वास्तव में इसे बदलना चाहिए?

डेटा के उचित उपचार की गारंटी देने के लिए, आप यह सुनिश्चित कर सकते हैं कि आपके पास सेब-से-सेब हैं। डेटा को एक चारसेट के रूप में तैयार किया गया है और इसे डेटाबेस के साथ एक तालिका में लोड करना संभवतया डेटा को संरेखित करता है जैसे कि यह एक और चार्ट को देखता है शायद डेटा को चारसेट के साथ प्रदर्शित नहीं करेगा mysqld देखता है जब पुनर्प्राप्त किया जाता है और एक डीबी कनेक्शन पर वापस भेजा जाता है। एक देव / मंचन सर्वर पर डेटाबेस लोड करने का प्रयास करें और डिफ़ॉल्ट चार्ट सेट करने के साथ प्रयोग करें।

कुछ डिफ़ॉल्ट उपयोग क्यों करते हैं utf8लेकिन कुछ डिफ़ॉल्ट उपयोग latin1?

यह MySQL बाइनरी के ओएस संस्करण पर निर्भर करेगा। latin1लिनक्स संस्करणों का उपयोग करते समय विंडोज संस्करण हो सकते हैं utf8


नमस्ते, आपके विस्तृत उत्तर के लिए धन्यवाद। वास्तव में मेरे सवाल यह नहीं है कि इसे कैसे बदला जाए, लेकिन ... 1. क्या मुझे वास्तव में इसे बदलना चाहिए? 2. कुछ डिफॉल्ट utf8 का उपयोग क्यों करते हैं लेकिन कुछ डिफॉल्ट लैटिन 1 का उपयोग करते हैं
योग

1
(पहले धन्यवाद फिर से) यह MySQL बाइनरी के ओएस संस्करण पर निर्भर करेगा। <- मेरा मतलब है जब मैं Ubuntu, क्यों डिफ़ॉल्ट के बीच मिलाया जाता है पर हूँ latin1और utf8, जैसे character_set_connectionUTF8 है, लेकिन character_set_databaselatin1 है
योग

1
@ रोलैंड [mysqld] character_set_database=utf8 character_set_server=utf8काम नहीं करते।
जॉर्ज बी।

मुझे अभी भी यह नहीं मिलता है ... भले ही होस्ट ओएस कुछ मूर्खतापूर्ण सीमित चारसेट का उपयोग करता है, डेटाबेस को डिफ़ॉल्ट रूप से स्टोर टेक्स्ट द्वारा चारसेट में नहीं करना चाहिए जो किसी भी चरित्र का प्रतिनिधित्व कर सकता है, भले ही वह इनपुट को स्वीकार करता हो latin1और उसे परिवर्तित करना हो। भंडारण के लिए?
एंडी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.