इसके बारे में सोचो:
- आप डेटाबेस में डेटा संग्रहीत कर रहे हैं
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
।