# 1273 - अज्ञात टकराव: 'utf8mb4_unicode_ci' cPanel


183

मेरे पास अपने स्थानीय मशीन पर एक वर्डप्रेस डेटाबेस है जिसे मैं cPanel पर होस्टेड phpMyAdmin में स्थानांतरित करना चाहता हूं। हालाँकि, जब मैं डेटाबेस को पर्यावरण में आयात करने की कोशिश करता हूं, तो मुझे यह त्रुटि मिलती रहती है:

#1273 - Unknown collation: 'utf8mb4_unicode_ci' 

मैंने Google के चारों ओर और एकमात्र समाधान जो मैंने पाया है, यह एक phpmysql त्रुटि है - # 1273 - # 1273 - अज्ञात टकराव: 'utf8mb4_general_ci' जो अब तक ज्यादा मददगार नहीं है। मैंने कुकीज़ साफ़ करने की कोशिश की है लेकिन यह अभी भी काम नहीं करेगा। कृपया सहायता कीजिए!


वर्डप्रेस का क्या संस्करण? Make.wordpress.org/core/2015/04/02/the-utf8mb4-upgrad
रिक जेम्स

जवाबों:


107

मेरे पास एक ही मुद्दा था क्योंकि हमारे सभी सर्वर MySQL के पुराने संस्करण चलाते हैं। PHP स्क्रिप्ट चलाकर इसे हल किया जा सकता है। एक फ़ाइल के लिए इस कोड को सहेजें और इसे डेटाबेस नाम, उपयोगकर्ता और पासवर्ड दर्ज चलाने के लिए और इसे से मिलान बदल देंगे utf8mb4/utf8mb4_unicode_ciकरने के लिएutf8/utf8_general_ci

<!DOCTYPE html>
<html>
<head>
  <title>DB-Convert</title>
  <style>
    body { font-family:"Courier New", Courier, monospace; }
  </style>
</head>
<body>

<h1>Convert your Database to utf8_general_ci!</h1>

<form action="db-convert.php" method="post">
  dbname: <input type="text" name="dbname"><br>
  dbuser: <input type="text" name="dbuser"><br>
  dbpass: <input type="text" name="dbpassword"><br>
  <input type="submit">
</form>

</body>
</html>
<?php
if ($_POST) {
  $dbname = $_POST['dbname'];
  $dbuser = $_POST['dbuser'];
  $dbpassword = $_POST['dbpassword'];

  $con = mysql_connect('localhost',$dbuser,$dbpassword);
  if(!$con) { echo "Cannot connect to the database ";die();}
  mysql_select_db($dbname);
  $result=mysql_query('show tables');
  while($tables = mysql_fetch_array($result)) {
          foreach ($tables as $key => $value) {
           mysql_query("ALTER TABLE $value CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci");
     }}
  echo "<script>alert('The collation of your database has been successfully changed!');</script>";
}

?>

47
ऐसा लगता है जैसे ओवरकिल बनामmysqldump --compatible=mysql4
icc97

2
मेरे लिए यह काम कर गया। फ़ाइल का नाम याद रखेंdb-convert.php
फ्रेड के

1
यदि आप 'लोकलहोस्ट' बनाते हैं, तो यह सही है।
br4nnigan 16

2
mysqldump --compatible=mysql4या नीचे दिया गया उत्तर एक बेहतर विकल्प है। मुझे नहीं लगता कि किसी लाइव साइट पर ऐसा कुछ बदलना एक बुद्धिमान विचार है। सही प्रारूप में निर्यात करने के लिए बेहतर है, या यदि वह विकल्प नहीं है, तो निर्यात की गई फ़ाइल को संपादित करें।
टिस्कॉन

तो आपने अभी-अभी मेरी जान बचाई है, और सभी मैं आपको दे सकता हूँ rn एक +1 है।
तरुक जूल

229

इस पोस्ट में तकनीक ने मेरे लिए काम किया

1) डेटाबेस के लिए "निर्यात" टैब पर क्लिक करें

2) "कस्टम" रेडियो बटन पर क्लिक करें

3) "प्रारूप-विशिष्ट विकल्प" शीर्षक वाले अनुभाग पर जाएं और "संगतता सिस्टम या पुराने MySQL सर्वर के लिए ड्रॉपडाउन को बदलने के लिए आउटपुट संगतता को अधिकतम करने के लिए:" NONE से MYSQL40।

4) नीचे तक स्क्रॉल करें और "गो" पर क्लिक करें।

मुझे यकीन नहीं है अगर ऐसा करने से कोई डेटा हानि होती है, हालांकि एक बार मैंने कोशिश की थी कि मुझे कोई नोटिस नहीं हुआ। न ही किसी ने जो ऊपर से जुड़े मंचों में जवाब दिया।

संपादित करें 8/12/16 - मेरा मानना ​​है कि इस तरह से एक डेटाबेस का निर्यात करने से मुझे ब्लैक स्टूडियो टिनीएमसीई विजुअल एडिटर विगेट्स में सहेजे गए डेटा को खोने का कारण बनता है , हालांकि मैंने पुष्टि करने के लिए कई परीक्षण नहीं किए हैं।


मेरे लिए काम नहीं किया, मुझे त्रुटि # 1231 मिली - परिवर्तनीय 'character_set_client' को 'NULL' के मान पर सेट नहीं किया जा सकता
nddess

अन्य समाधानों में कई असफल प्रयासों के बाद, इसने पहले प्रयास में पूरी तरह से काम किया।
विन्सेन्ट पोलीसी

कुछ नए Wordpress साइटों के साथ काम नहीं करता है। जब इसे दूसरे सर्वर पर आयात किया जाता है, तो यह इस त्रुटि को उत्पन्न करता है पहली तालिका में यह आयात करने की कोशिश करता है (wp_commentmeta) # 1064 - आपके SQL सिंटैक्स में कोई त्रुटि है; मैन्युअल टाइप करें जो आपके MySQL सर्वर वर्जन से संबंधित है, जो कि सही टाइप के लिए 'TYPE = MyISAM AUTO_INCREMENT = 1' लाइन 19 के पास है
उस-बेन-

यह मेरे लिए कोई फर्क नहीं पड़ता था, अभी भी एक ही त्रुटि संदेश मिल रहा है
pealo86

आप बॉस हैं
Aseel अशरफ

159

यदि आपने पहले से ही कोई .sqlफ़ाइल निर्यात की है , तो सबसे अच्छी बात यह है कि यदि आप उन्हें अपनी फ़ाइल में रखते हैं, तो निम्न को ढूंढें और प्रतिस्थापित करें:

  • utf8mb4_0900_ai_ci सेवा utf8_unicode_ci
  • utf8mb4 सेवा utf8
  • utf8_unicode_520_ci सेवा utf8_unicode_ci

यह स्थान ले लेगा utf8mb4_unicode_ciलिए utf8_unicode_ci। अब आप अपने phpMyAdmin cPanel पर जाएं और ऑपरेशन> Collation केutf8_unicode_ci माध्यम से DB collation सेट करें ।

यदि आप एक को निर्यात कर रहे हैं .sql, तो प्रारूप को बदलने के लिए बेहतर है कि आप फ़ाइल कैसे निर्यात कर रहे हैं। एवरस्टर एवर की जाँच करें (यह इस पेज में ही है)


2
यह पूरी तरह से इस एक stackoverflow.com/a/30694416/1022726
iurii

आप सभी लोगों को एकजुट करने के लिए sed -i.bak s/utf8mb4/utf8/g FILE_NAME:। यह utf8mb4FILE_NAME की सभी घटनाओं को खोज लेगा और utf8मूल फ़ाइल की प्रतिलिपि को FILE_NAME.bak पर सहेजते समय इसे बदल देगा । आपको अपने मामले में सटीक गठबंधन को निर्दिष्ट करने के लिए इसे ट्वीक करने की आवश्यकता हो सकती है लेकिन यह एक शुरुआत है :)
डेवलक

1
मुझे भी बदलना पड़ा: utf8_unicode_520_ci साथ: utf8_unicode_ci
निक रिवर्स

या vi के माध्यम से: vi dump.sqlऔर फिर इसके माध्यम से ऐसा करें :%s/uf8mb4/utf8/g:।
वैलेंटाइन ग्राईगोइरे

2
और utf8_0900_ai_ciसाथ में बदलेंutf8_unicode_ci
इरफान युसनीफ

44

मैं लिनक्स में इसका उपयोग करता हूं:

sed -i 's/utf8mb4/utf8/g' your_file.sql
sed -i 's/utf8_unicode_ci/utf8_general_ci/g' your_file.sql
sed -i 's/utf8_unicode_520_ci/utf8_general_ci/g' your_file.sql

फिर अपने_file.sql को पुनर्स्थापित करें

mysql -u yourdBUser -p yourdBPasswd yourdB < your_file.sql

1
दूसरे उत्तर पर एक टिप्पणी है, जो यहाँ दोहराता है। -I फ्लैग के बाद sed के OS X संस्करण को अतिरिक्त तर्क की आवश्यकता होती है। तो sed -i '' ....काम करता है।
कैंट

2
मुझे इसे भी चलाना था:sed -i 's/utf8_0900_ai_ci/utf8_general_ci/g' your_file.sql
माइकल हेस

28

वर्डप्रेस 4.2 ने सुरक्षा कारणों से "utf8mb4" चरित्र एन्कोडिंग के लिए समर्थन पेश किया , लेकिन केवल MySQL 5.5.3 और इससे अधिक समर्थन। इंस्टॉलर (और updater) जिस तरह से इसे संभालता है वह यह है कि यह आपके MySQL संस्करण की जांच करता है और आपके डेटाबेस को केवल utfmb4 में अपग्रेड किया जाएगा यदि यह समर्थित है

यह सिद्धांत में बहुत अच्छा लगता है, लेकिन समस्या (जैसा कि आपने पाया है) तब है जब आप डेटाबेस से एक MySQL सर्वर से माइग्रेट कर रहे हैं जो utf8mb4 को एक का समर्थन करता है जो ऐसा नहीं करता है। जबकि दूसरे तरीके से काम करना चाहिए, यह मूल रूप से एकतरफा ऑपरेशन है।

जैसा कि एवस्टर द्वारा बताया गया है कि आपको PHPMYAdmin के "निर्यात" सुविधा का उपयोग करके सफलता मिल सकती है। " निर्यात विधि: कस्टम " का उपयोग करें और " डेटाबेस सिस्टम या पुराने MySQL सर्वर के साथ आउटपुट संगतता को अधिकतम करने के लिए: " ड्रॉपडाउन "" MYSQL का चयन करें ।

Mysqldump का उपयोग करके कमांड लाइन निर्यात के लिए। झंडे पर एक नजर:

$ mysqldump --compatible=mysql4

नोट: यदि डेटाबेस में कोई 4-बाइट वर्ण हैं, तो वे दूषित हो जाएंगे।

अंत में, लोकप्रिय WP माइग्रेट DB PRO प्लगइन का उपयोग करने वाले किसी भी व्यक्ति के लिए, इस Wordpress.org थ्रेड में एक उपयोगकर्ता रिपोर्ट करता है कि माइग्रेशन हमेशा ठीक से हैंडल किया जाता है, लेकिन मैं कुछ भी आधिकारिक नहीं पा रहा था।

WP माइग्रेट DB प्लगइन डेटाबेस को एक कोलाजेशन से दूसरे में तब ट्रांसलेट करता है, जब वह मेजर के बीच 4.2 साइट्स को प्री- या पोस्ट 5.5.3 MySQL के साथ घुमाता है

इस समय, डेटाबेस अद्यतन से बाहर निकलने का एक तरीका प्रतीत नहीं होता है। इसलिए यदि आप किसी वर्कफ़्लो का उपयोग कर रहे हैं जहाँ आप किसी सर्वर या लोकलहोस्ट से MySQL> 5.5.3 के साथ माइग्रेट कर रहे हैं तो पुराने MySQL वर्जन का उपयोग करने से आप भाग्य से बाहर हो सकते हैं।


"MYSQL 40" के लिए संगतता बदलना पूरी तरह से मेरे लिए काम करता है।
किरन गिल

3
यदि आप तब mysql4 संगत डंप को v5.5.3 डेटाबेस (मैं 5.5.28 का उपयोग कर रहा हूं) में आयात करने का प्रयास करता हूं तो यह विफल हो जाता है क्योंकि स्क्रिप्ट में TYPE=MyISAMवह भी शामिल है जिसे v5.1 में हटा दिया गया था। एक खोज करें और उसके साथ बदलें ENGINE=MyISAM। मैं mysqldumpआउटपुट विकल्पों का उपयोग करके इसके चारों ओर एक रास्ता नहीं देख सकता था ।
icc97

26

मेरे मामले में यह पता चला है कि मेरा
नया सर्वर चल रहा था MySQL 5.5,
पुराना सर्वर चल रहा था MySQL 5.6
इसलिए मुझे यह त्रुटि तब हुई जब .sqlमैं अपने पुराने सर्वर से निर्यात की गई फ़ाइल को आयात करने की कोशिश कर रहा था।

MySQL 5.5 समर्थन नहीं करता है utf8mb4_unicode_520_ci, लेकिन
MySQL 5.6 करता है।

MySQL 5.6नए सर्वर पर अपडेट करने से त्रुटि का समाधान हो गया!

यदि आप MySQL 5.5 को बनाए रखना चाहते हैं, तो आप:
- अपनी निर्यात की गई .sqlफ़ाइल की एक प्रति बना सकते हैं
- उदाहरणों को प्रतिस्थापित कर सकते हैं utf8mb4unicode520_ciऔर utf8mb4_unicode_520_ci
... utf8mb4_unicode_ci
अपनी अद्यतन .sqlफ़ाइल को आयात कर सकते हैं।


1
हां - 5.6 पर अपलोड करना इसके लिए सबसे सरल उपाय है (और उबंटू में एक mysql-server-5.6पैकेज है जिसे आप स्थापित कर सकते हैं जो आपके लिए 5.5 को स्वचालित रूप से हटा देगा)।
विलियम टरेल

15

Wp-config.php में एक पंक्ति है:

define('DB_CHARSET', 'utf8mb4');

यदि आप मार्कोवेज़ / एवरस्टर के निर्देशों का पालन ​​करते हैं, तो उत्पादन सर्वर पर इस लाइन को बदलना न भूलें

define('DB_CHARSET', 'utf8');

टूटे हुए 4-बाइट वर्णों को ठीक करने के लिए


1
इसके अलावा संशोधित करने के लिए मत भूलना define('DB_COLLATE', 'utf8_general_ci');। इससे मुझे मदद मिली।
अब्दुहाफिज़

10

लंबे समय के शोध के बाद मैंने ऊपर का हल खोजा है:

  1. सबसे पहले आप wp-config.php> डेटाबेस DB_CHARSET डिफ़ॉल्ट को "utf8" में बदलें।

  2. डेटाबेस के लिए "निर्यात" टैब पर क्लिक करें

  3. "कस्टम" रेडियो बटन पर क्लिक करें

  4. "स्वरूप-विशिष्ट विकल्प" शीर्षक वाले अनुभाग पर जाएं और "संगतता सिस्टम या पुराने MySQL सर्वर के लिए ड्रॉपडाउन को बदलने के लिए आउटपुट संगतता को अधिकतम करने के लिए:" NONE से MYSQL40।

  5. नीचे तक स्क्रॉल करें और जाएं पर क्लिक करें

फिर तुम पर हो।


7

आपके मेजबान की तरह लगता है कि एक MySQL संस्करण प्रदान नहीं करता है जो utf8mb4 टकराव के साथ तालिकाओं को चलाने में सक्षम है।

Emojis को सपोर्ट करने के लिए वर्डप्रेस टेबल को संस्करण 4.2 (अप्रैल, 23 ​​वें 2015 को जारी) के साथ utf8mb4 में बदल दिया गया था, लेकिन इसका उपयोग करने के लिए आपको MySQL 5.5.3 की आवश्यकता है। 5.5.3। मार्च 2010 से है, इसलिए इसे आम तौर पर व्यापक रूप से उपलब्ध होना चाहिए। यदि आप देख सकते हैं कि आपका होस्ट उस संस्करण को उपलब्ध कराता है?

यदि नहीं, और एक उन्नयन संभव नहीं है, तो आपको नवीनतम वर्डप्रेस संस्करणों को चलाने के लिए दूसरे होस्टर के लिए बाहर देखना पड़ सकता है (और आपको सुरक्षा कारणों से हमेशा ऐसा करना चाहिए)।


1
आप "mysql -V" के साथ कमांड लाइन के माध्यम से MySQL के अपने संस्करण की जांच कर सकते हैं
एड्ड स्मिथ

2

तो मैंने इस तरह से हल किया, MySQL 5.6 से MySQL 5.5 तक:

$ mysqldump -u username -p --compatible=mysql4 database_name > database_name.sql
$ sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql

(वैकल्पिक) एक .sql.gzफ़ाइल बनाएँ :

$ gzip database_name.sql 

व्याख्या

$ mysqldump -u username -p --compatible=mysql4 database_name > database_name.sql

जैसा कि इस उत्तर में बताया गया है , यह phpMyAdmin के इस विकल्प के बराबर है: "डेटाबेस सिस्टम या पुराने MySQL सर्वर के साथ आउटपुट संगतता को अधिकतम करने के लिए:" ड्रॉपडाउन "" MYSQL 40 "का चयन करें

$ sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql

हमें इस मुद्दे को हल करने के लिए इसकी आवश्यकता है:

ERROR 1064 (42000) लाइन 18 पर: आपके SQL सिंटैक्स में एक त्रुटि है; 9 के लिए लाइन पर 'TYPE = InnoDB' के पास उपयोग करने के लिए सही सिंटैक्स के लिए अपने MySQL सर्वर संस्करण से मेल खाने वाले मैनुअल की जांच करें


1
ध्यान दें कि यदि आप ओएस एक्स के सेड के संस्करण का उपयोग कर रहे हैं $ sed -i'' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql:। अगर आप database_name.sql.bakसेड की जगह पहले की कॉपी रखना चाहते हैं :$ sed -i'bak' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql
जस्टिन फोर्टियर

आप इनलाइन भी कर सकते हैं sed
डेविडबिटन

इसके अलावा अगर आप MySQL 8 पर mysqldump चला रहे हैं तो आपको --compatible=ansiविकल्प का उपयोग करने की आवश्यकता है
AbstractVoid

1

मैंने भी इस मुद्दे का अनुभव किया। समाधान जो मेरे लिए काम करता था वह सीक्वल प्रो के साथ स्थानीय डेटाबेस खोल रहा था और आयात करने से पहले प्रत्येक तालिका के लिए utf8 / utf8_bin को एन्कोडिंग और कोलाज को अपडेट कर रहा था।


1

सबसे आसान तरीका यह करने के लिए अपने डेटाबेस का निर्यात है .sqlNotepad ++ पर, खोलने यह और "खोजें और बदलें" utf8mb4_unicode_ciकरने के लिए utf8_unicode_ciऔर भी बदलने के utf8mb4लिए utf8। डेटाबेस कॉलेशन को utf8_unicode_ci(ऑपरेशंस> कोलेशन) में बदलना न भूलें ।


0

नोटपैड ++ पर एसक्यूएल फ़ाइल खोलें और ctrl + H. फिर आप " utf8mb4" खोज पर और " utf8" को प्रतिस्थापित करें। मुद्दे को तब ठीक किया जाएगा।


यह कहता है "अज्ञात
टकराव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.