तालिका के डिफ़ॉल्ट टकराव को कैसे बदलें?


187
create table check2(f1 varchar(20),f2 varchar(20));

डिफ़ॉल्ट टकराव के साथ एक तालिका बनाता है latin1_general_ci;

alter table check2 collate latin1_general_cs;
show full columns from check2;

कॉलम के व्यक्तिगत टकराव को 'latin1_general_ci' के रूप में दिखाता है।

फिर परिवर्तन तालिका कमांड का प्रभाव क्या है?



आप स्वयं के रूप में सही उत्तर को बदलना चाह सकते हैं और कई अन्य इस बात से सहमत हैं कि दूसरा सही है।
अहि टूना

जवाबों:


597

मौजूदा स्तंभों सहित तालिका के डिफ़ॉल्ट वर्ण सेट और टकराव को बदलने के लिए ( खंड में परिवर्तन पर ध्यान दें )

alter table <some_table> convert to character set utf8mb4 collate utf8mb4_unicode_ci;

उत्तर संपादित किया, कुछ टिप्पणियों के संकेत के लिए धन्यवाद:

Utf8 की सिफारिश से बचना चाहिए। यह लगभग कभी नहीं है कि आप क्या चाहते हैं, और अक्सर अप्रत्याशित गड़बड़ियां होती हैं। Utf8 वर्ण सेट पूरी तरह से UTF-8 के साथ संगत नहीं है। यदि आप यूटीएफ -8 चाहते हैं तो utf8mb4 वर्ण सेट वह है जो आप चाहते हैं। - रिच रीमर मार्च 28 '18 को 23:41 बजे

तथा

यह काफी महत्वपूर्ण लगता है, खुशी है कि मैंने टिप्पणियों को पढ़ा और धन्यवाद @RichRemer। निक्की, मुझे लगता है कि आपको अपने उत्तर में यह विचार करना चाहिए कि इसे कितने विचार मिलते हैं। यहाँ देखें https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8.html और यहाँ MySQL में utf8mb4 और utf8 charsets में क्या अंतर है? - पॉलप्रो मार 12 17:46 पर


4
डिफ़ॉल्ट चरित्र सेट को बदलने के निहितार्थ क्या हैं? क्या यह मौजूदा डेटा को अपडेट करता है और इसलिए टेबल के माध्यम से चलने और इसे लॉक करने, आदि को अपडेट करने की आवश्यकता है?
अनुदान

utf8_binबेहतर है, है ना? बीच क्या अंतर है utf8_binऔर utf8_unicode_ci?
जसोम डॉटनेट

1
यह सिर्फ एक उदाहरण है जिसका मैंने उपयोग किया है। अंतर यह है कि utf8_binमामला संवेदनशील है और utf8_unicode_ciमामला असंवेदनशील है। एक जरूरी दूसरे से बेहतर नहीं है - अपनी आवश्यकताओं के अनुरूप जो भी उपयोग करें।
निक्की इरविन रामिरेज़

12
@JasomDotnet अब आपको utf8mb4_unicode_ci stackoverflow.com/questions/766809/…
baptx

2
सिफारिश करने से बचना चाहिए utf8। यह लगभग कभी नहीं है कि आप क्या चाहते हैं, और अक्सर अप्रत्याशित गड़बड़ियां होती हैं। utf8वर्ण सेट UTF-8 के साथ पूरी तरह से संगत नहीं है। utf8mb4वर्ण सेट अगर आप UTF-8 चाहते तुम क्या चाहते है।
रिच रीमर

34

MySQL के 4 स्तर समतलीकरण हैं: सर्वर, डेटाबेस, टेबल, कॉलम। यदि आप सर्वर, डेटाबेस या तालिका के टकराव को बदलते हैं, तो आप प्रत्येक कॉलम के लिए सेटिंग नहीं बदलते हैं, लेकिन आप डिफ़ॉल्ट टकराव को बदलते हैं।

उदाहरण के लिए, यदि आप किसी डेटाबेस के डिफॉल्ट कोलेशन को बदलते हैं, तो उस डेटाबेस में आपके द्वारा बनाए गए प्रत्येक नए टेबल में उस कॉलेशन का उपयोग किया जाएगा, और यदि आप किसी टेबल के डिफॉल्ट कोलेशन को बदलते हैं, तो उस तालिका में आपके द्वारा बनाए गए प्रत्येक कॉलम को वह कॉलेशन मिल जाएगा।


8
वास्तव में, MySQL में कोलाज के FIVE स्तर हैं, एक चरित्र सेट स्तर डिफ़ॉल्ट कोलाज़ सेटिंग है जिसे बहुत से लोग भूल जाते हैं।
देवी

6
कनेक्शन कनेक्शन भी है show variables like "collation%";, इसलिए कुल SIX है
Dzmitry Lazerka

9

यह तालिका के लिए डिफ़ॉल्ट टकराव सेट करता है; यदि आप एक नया कॉलम बनाते हैं, तो मुझे लैटिन_गेंरल_स्की से टकराना चाहिए - मुझे लगता है। व्यक्तिगत कॉलम के लिए कोलाज निर्दिष्ट करने का प्रयास करें और देखें कि क्या काम करता है। जिस तरह से इसे संभालता है, उसके संबंध में MySQL का वास्तव में कुछ विचित्र व्यवहार है।


3

केवल तालिका ही नहीं SCHEMA को बदलने की आवश्यकता हो सकती है

ALTER SCHEMA `<database name>`  DEFAULT CHARACTER SET utf8mb4  DEFAULT COLLATE utf8mb4_unicode_ci (as Rich said - utf8mb4);

(mariaDB 10)


<database name>इसके बजाय<table name>
dnivog

1
स्वीकार किए जाते हैं जवाब तुम क्यों की सिफारिश नहीं करना चाहिए पर मेरी टिप्पणी देखें utf8, लेकिन utf8mb4
रिच रेमर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.