इस प्रश्न के पहले से ही बहुत सारे उत्तर हैं, लेकिन माथियास ब्यनेंस ने उल्लेख किया है कि बेहतर यूटीएफ -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)। उसके बाद, तालिका को परिवर्तित किया जा सकता है।
utf8mb4
, यानी पूर्ण यूनिकोड समर्थन के साथ वास्तविक UTF-8। MySQL डेटाबेस में पूर्ण यूनिकोड का समर्थन करने का तरीका देखें ।