दिलचस्प पोस्ट
सीएसएस का उपयोग करके पाठ की लंबाई को एन लाइन पर सीमित करें .NET 4.0 Windows XP SP2 या नीचे के साथ संगत है? जावा: सिस्टम। एक्सट () को कॉल करने वाले तरीकों का परीक्षण कैसे करें? मैं छवियों के लिए ज़ूम कार्यक्षमता कैसे प्राप्त करूं? प्रत्येक ऑब्जेक्ट के लिए एक जेनेरिक रिपॉजिटरी बनाम विशिष्ट रिपॉजिटरी बनाने का लाभ? सबलेट फिल्टर का उपयोग करके प्रतिक्रिया में सामग्री डालने के लिए एक उदाहरण की तलाश में स्थानीय शाखा, स्थानीय ट्रैकिंग शाखा, रिमोट ब्रांच और रिमोट ट्रैकिंग शाखा के बीच क्या अंतर है? एलडीपीआई, एमडीपीआई, एचडीपीआई, एक्सएचडीपीआई के लिए एंड्रॉइड स्प्लैश स्क्रीन आकार? – उदा: एलडीपीआई के लिए 1024X768 पिक्सल index.php डिफ़ॉल्ट रूप से लोड नहीं है Log4j लॉगगर प्रोग्रामिंग को कॉन्फ़िगर करना MathML और जावा मैं कैसे निर्दिष्ट करूं कि एक विधि का वापसी प्रकार समान ही अजगर में ही है? LD_LIBRARY_PATH बनाम LIBRARY_PATH इवेंट के साथ वेबकिट समस्या। प्लेयर और इवेंट। लेयर वाई वास्तव में जावा में एक उदाहरण क्या है?

डेटाबेस का डिफ़ॉल्ट मिलान कैसे बदला जाए?

हमारे पिछले प्रोग्रामर ने एक तालिका (MySQL) में गलत मिलान सेट किया था। उसने इसे लैटिन मिलान के साथ सेट किया, जब यह यूटीएफ 8 होना चाहिए, और अब मेरे पास समस्याएं हैं चीनी और जापान चरित्र के साथ हर रिकॉर्ड ??? चरित्र।

कोलेशन बदलना और चरित्र का विवरण वापस करना संभव है?

वेब के समाधान से एकत्रित समाधान "डेटाबेस का डिफ़ॉल्ट मिलान कैसे बदला जाए?"

डेटाबेस मिलान बदलना:

ALTER DATABASE <database_name> CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

टेबल कोलेशन बदलें:

 ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

स्तंभ कॉलेशन बदलें:

 ALTER TABLE <table_name> MODIFY <column_name> VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

और जानकारी:

  • Utf8_general_ci और utf8_unicode_ci के बीच diffrences क्या हैं?
  • Utf8_general_ci और utf8_unicode_ci के बीच अंतर क्या है
  • डेटाबेस, टेबल, कॉलम के मिलान को कैसे बदल सकता है?

यहाँ सभी डेटाबेस / तालिकाओं / स्तंभों को कैसे बदलना है इन प्रश्नों को चलाने और वे आपके पूरे स्कीमा को utf8 में कनवर्ट करने के लिए आवश्यक सभी बाद के प्रश्नों को आउटपुट करेंगे। उम्मीद है की यह मदद करेगा!

– डेटाबेक डिफ़ॉल्ट कोलेशन बदलें

 SELECT DISTINCT concat('ALTER DATABASE `', TABLE_SCHEMA, '` CHARACTER SET utf8 COLLATE utf8_unicode_ci;') from information_schema.tables where TABLE_SCHEMA like 'database_name'; 

– टेबल टेबलिंग / चार सेट बदलें

 SELECT concat('ALTER TABLE `', TABLE_SCHEMA, '`.`', table_name, '` CHARACTER SET utf8 COLLATE utf8_unicode_ci;') from information_schema.tables where TABLE_SCHEMA like 'database_name'; 

– COLUMN कोलेशन / चार सेट बदलें

 SELECT concat('ALTER TABLE `', t1.TABLE_SCHEMA, '`.`', t1.table_name, '` MODIFY `', t1.column_name, '` ', t1.data_type , '(' , t1.CHARACTER_MAXIMUM_LENGTH , ')' , ' CHARACTER SET utf8 COLLATE utf8_unicode_ci;') from information_schema.columns t1 where t1.TABLE_SCHEMA like 'database_name' and t1.COLLATION_NAME = 'old_charset_name'; 

सावधान रहें कि Mysql में, utf8 वर्ण सेट केवल वास्तविक UTF8 वर्ण सेट का सबसेट है। भंडारण के एक बाइट को बचाने के लिए, MySQL टीम ने पूर्ण चार-बाइट्स के बजाय केवल यूटीएफ 8 वर्णों के केवल तीन बाइट्स को स्टोर करने का फैसला किया। इसका मतलब है कि कुछ पूर्व एशियाई भाषा और इमोजी पूरी तरह से समर्थित नहीं हैं। यह सुनिश्चित करने के लिए कि आप सभी UTF8 वर्णों को संग्रहीत कर सकते हैं, utf8mb4 डेटा प्रकार का उपयोग करें, और utf8mb4_bin या utf8mb4_general_ci Mysql में

यहां प्रक्रिया का अच्छी तरह से वर्णन किया गया है हालांकि, कुछ अक्षर जो लैटिन अंतरिक्ष में फिट नहीं थे हमेशा के लिए चले गए हैं। यूटीएफ -8 लैटिन 1 का एक सुपरसेट है रिवर्स नहीं अधिकांश एकल बाइट स्थान में फिट होंगे, लेकिन कोई भी अनिर्धारित नहीं (लैटिन 1 की एक सूची की जांच नहीं करेगा – सभी 256 वर्ण परिभाषित नहीं हैं, mysql की लैटिन 1 परिभाषा के आधार पर)

दाऊद व्हिटकर ने जो पोस्ट किया है उसे जोड़ना, मैंने एक क्वेरी बनाई है जो पूरी मेज और स्तंभों को बदलती है जो प्रत्येक तालिका में परिवर्तित हो जाएगा। यह चलाने के लिए एक अच्छा विचार हो सकता है

SET सत्र group_concat_max_len = 100000;

सबसे पहले यह सुनिश्चित करने के लिए कि आपकी ग्रुप कॉन्सैट बहुत छोटी सीमा से अधिक नहीं है जैसा कि यहां देखा गया है ।

  SELECT a.table_name, concat('ALTER TABLE ', a.table_schema, '.', a.table_name, ' DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci, ', group_concat(distinct(concat(' MODIFY ', column_name, ' ', column_type, ' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ', if (is_nullable = 'NO', ' NOT', ''), ' NULL ', if (COLUMN_DEFAULT is not null, CONCAT(' DEFAULT \'', COLUMN_DEFAULT, '\''), ''), if (EXTRA != '', CONCAT(' ', EXTRA), '')))), ';') as alter_statement FROM information_schema.columns a INNER JOIN INFORMATION_SCHEMA.TABLES b ON a.TABLE_CATALOG = b.TABLE_CATALOG AND a.TABLE_SCHEMA = b.TABLE_SCHEMA AND a.TABLE_NAME = b.TABLE_NAME AND b.table_type != 'view' WHERE a.table_schema = ? and (collation_name = 'latin1_swedish_ci' or collation_name = 'utf8mb4_general_ci') GROUP BY table_name; 

पिछले उत्तर के बीच यहां एक अंतर यह है कि यह यूटी 8 एमबी 4 के बजाय यूटीएफ 8 का उपयोग कर रहा था और टी 1 के साथ टी 1 डीएटीआई टाइप का उपयोग कर रहा था। एचटीटीपीएआरएआरएसीटीएएमएएमएएमआईएमआईएमआईएलएएनएनटीएएनटीएफ़ ईनम के लिए काम नहीं कर रहा था। इसके अलावा, मेरी क्वेरी में दृश्यों को शामिल नहीं किया गया है क्योंकि उनको अलग से बदलना होगा।

मैं एक पर्ल स्क्रिप्ट का उपयोग केवल एक सरणी के रूप में इन सभी परतों को वापस करने के लिए और उनके ऊपर फिर से किया, उन स्तंभों को तय किया जो बहुत लंबा थे (आम तौर पर वे varchar (256) थे जब डेटा में केवल 20 अक्षर होते थे, इसलिए यह आसान आसान था )।

मुझे लगता है कि लैटिन 1 -> utf8mb4 से बदलते समय कुछ डेटा दूषित हो गया था यह यूटीएफ 8 एन्कोडेड प्रतीत होता है, कॉलम में लैटिन 1 वर्ण कनवर्ज़न में बफर मिलेगा। मैंने केवल उन कॉलमों से डेटा आयोजित किया था जो मुझे पता था कि स्मृति में एक समस्या पहले और बाद में बदलनी होगी और उनसे तुलना की जाएगी और डेटा को ठीक करने के लिए अपडेट स्टेटमेंट जेनरेट करेगा।