# 1273 - การเปรียบเทียบที่ไม่รู้จัก: 'utf8mb4_unicode_520_ci'


157

ฉันมีเว็บไซต์ WordPress บนเซิร์ฟเวอร์WAMPในพื้นที่ของฉัน แต่เมื่อฉันอัปโหลดฐานข้อมูลไปยังเซิร์ฟเวอร์สดฉันได้รับข้อผิดพลาด

#1273  Unknown collation: utf8mb4_unicode_520_ci

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม!


37
sed -i 's/utf8mb4_unicode_520_ci/utf8mb4_unicode_ci/g' file.sql
Nabil Kadimi

4
ในทะเลของโซลูชันค้นหาและแทนที่ด้านล่างอย่าลืมชำระเงิน @ คำตอบของ SherylHohman ก่อน - เพียงอัปเกรดเป็น mariadb / mysql 5.6 เพื่อให้เซิร์ฟเวอร์ของคุณรองรับการเปรียบเทียบนี้
squarecandy


นอกจากนี้ยังมีคู่มือฉบับย่อที่นี่ ( wpza.net/unknown-collation-utf8mb4_unicode_520_ci ) ซึ่งอธิบาย 3 ขั้นตอนทั้งหมดที่คุณควรทำเพื่อให้แน่ใจว่าคุณได้ทำทุกอย่างแล้ว
WPZA

ตรวจสอบโซลูชันนี้ที่นี่เพื่อ # 1273 - การเรียงหน้าไม่ทราบ: 'utf8mb4_0900_ai_ci' freakyjolly.com/…
รหัส Spy

คำตอบ:


217

คุณสามารถแก้ปัญหานี้ได้โดยการค้นหา

ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;

ใน.sqlไฟล์ของคุณและสลับกับ

ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

28
ฉันแนะนำคำตอบโดย Sabba ( stackoverflow.com/a/44122258/168309 ) เนื่องจากยังคงใช้ utf8mb4 ไว้
Amir

5
วิธีแก้ปัญหาด้านล่างของ @Sabba Keynejad ดีกว่าในความคิดของฉันเนื่องจากมันยังคง mb4 คุณควรลองก่อน
Maor Barazany

หมายเหตุฉันต้องแทนที่สิ่งนี้ในหลาย ๆ ที่ในไฟล์ SQL นอกจากนี้ยังมีสถานที่ที่ฉันต้องทำstackoverflow.com/a/44122258/1436129ด้านล่างด้วย
aubreypwd

พบจริงคำตอบนี้ทำงานเมื่อคำตอบที่เชื่อมโยงโดย Sabba ไม่ได้ น่าจะเป็นเพราะการติดตั้ง MySql ของฉันเป็นค่าเริ่มต้น +1
ไปที่การเข้ารหัส

มันไม่ทำงานตอนนี้มันให้ข้อผิดพลาด: COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4' ฉันได้แทนที่utf8mb4_unicode_520_ciด้วยutf8mb4_unicode_ciและมันทำงานตามคำตอบของ Sabba
Haritsinh Gohil

286

ฉันเชื่อว่าข้อผิดพลาดนี้เกิดขึ้นเนื่องจากเซิร์ฟเวอร์ในพื้นที่และเซิร์ฟเวอร์ที่ใช้งานจริงกำลังใช้งาน MySQL เวอร์ชันต่างๆ เพื่อแก้ปัญหานี้:

  1. เปิดไฟล์ sql ในเท็กซ์เอดิเตอร์ของคุณ
  2. ค้นหาและแทนที่ทั้งหมดutf8mb4_unicode_520_ciด้วยutf8mb4_unicode_ci
  3. บันทึกและอัปโหลดไปยัง mySql db ใหม่

หวังว่าจะช่วยป้อนคำอธิบายรูปภาพที่นี่


4
ไม่มีทาง!!! มันได้รับการรับรองอย่างกว้างขวางว่าutf8mb4_unicode_520_ciมีมากรองรับ UTF-8 ดีกว่าutf8mb4_unicode_ci! Sauce: mysql.rjweb.org/doc.php/charcoll#best_practiceด้วยการอธิบายที่ชัดเจนว่า 520_ci เหนือกว่าที่นี่: mysql.rjweb.org/utf8_collations.html
John

5
@John บทความที่คุณเชื่อมโยงไม่ได้ป้องกันความคิดเห็นนั้นจริงๆ "ดังนั้น" ของพวกเขาไม่สามารถระบุได้อย่างถูกต้องจากหลักฐานของพวกเขา โดยรวมแล้วบทความทั้งหมดเขียนไม่ดีแม้ว่าจะมีข้อมูลที่ดีอยู่บ้างก็ตาม การเปรียบเทียบ 520 ใช้รุ่นใหม่ของอัลกอริทึม Unicode Collation (UCA - รุ่น 5.2.0) ที่มีน้ำหนักแตกต่างกัน แต่จะบอกว่า "มีการสนับสนุน UTF-8 ที่ดีกว่ามาก" ดูเหมือนจะยืดได้มากกว่า
Gremio

สมมติว่าส่วนมาตรฐาน (Unicode) จะทำให้แต่ละรุ่นที่ใหม่กว่า (5.20) "ดีกว่า" กว่ารุ่นที่เก่ากว่า (4.0)
Rick James

นี่คือคำตอบที่ดีที่สุด
Niby

ฉันแนะนำวิธีแก้ปัญหานี้เพราะมันแทนที่ "utf8mb4_unicode_520_ci" ทั้งหมดที่เกิดขึ้น ในขณะที่คำตอบ sandani savani ทิ้งไว้บ้าง
Rakesh

49

ในกรณีของฉันมันกลับกลายเป็นของฉัน
เซิร์ฟเวอร์ใหม่ที่กำลังวิ่ง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ไฟล์ที่อัปเดตของคุณ


2
นี่เป็นวิธีที่ดีที่สุดในการทำหากคุณสามารถควบคุมเซิร์ฟเวอร์ได้อย่างสมบูรณ์ อัปเกรดเซิร์ฟเวอร์ใหม่เพื่อให้ตรงกับเซิร์ฟเวอร์เก่า หากคุณไม่มีสิทธิ์เข้าถึงการอัปเกรดตำแหน่งเซิร์ฟเวอร์ใหม่ของคุณวิธีการค้นหาแทนที่อาจจะใช้ได้ แต่ในกรณีใด ๆ ที่คุณสามารถทำการอัปเกรดนี้แทนคุณควร
squarecandy

1
5.6 คือเมื่อเพิ่ม520
Rick James

นี่ควรเป็นคำตอบที่ถูกต้อง โซลูชันอื่น ๆ ส่วนใหญ่มีลักษณะเหมือนแฮ็ก ขอบคุณ @SherylHohman
sawyerrken

30

เปิดไฟล์ sql ในโปรแกรมแก้ไขข้อความของคุณ

1. ค้นหา: utf8mb4_unicode_ci แทนที่: utf8_general_ci (แทนที่ทั้งหมด)

2. ค้นหา: utf8mb4_unicode_520_ci แทนที่: utf8_general_ci (แทนที่ทั้งหมด)

3. ค้นหา: utf8mb4 แทนที่: utf8 (แทนที่ทั้งหมด)

บันทึกและอัพโหลด!


ฉันดีใจจริงๆที่ฉันพบวิธีแก้ปัญหาของคุณฉันได้รับข้อผิดพลาด # 1273 มาหลายวันแล้วและฉันไม่สามารถหาวิธีแก้ปัญหานี้ได้เลย
flying-dev

ผู้ช่วยชีวิต ขอบคุณ!
robbclarke


14

เปลี่ยนง่าย

sed -i 's/utf8mb4_unicode_520_ci/utf8mb4_unicode_ci/g' your_sql_file.sql

2
ใน macOS:sed -i '' 's/utf8mb4_unicode_520_ci/utf8mb4_unicode_ci/g' your_sql_file.sql
Osvaldas


6

ค้นหาและแทนที่:

utf8mb4_unicode_520_ci

กับ

utf8_general_ci

ในไฟล์ sql ทั้งหมด


3
generalและutf8เป็นทั้งสองขั้นตอนย้อนหลัง
Rick James

3

ไปงานเลี้ยงสาย แต่ในกรณีนี้เกิดขึ้นกับการWORDPRESSติดตั้ง:

#1273 - Unknown collation: 'utf8mb4_unicode_520_ci

ใน phpmyadmin ภายใต้export method> Format-specific options(การส่งออกที่กำหนดเอง)

ตั้งค่าให้ : MYSQL40

หากคุณจะพยายามนำเข้าตอนนี้คุณอาจได้รับข้อความแสดงข้อผิดพลาดอื่น:

1064 - You have an error in your SQL syntax; .....

นั่นเป็นเพราะTYPEตัวเลือกที่เก่ากว่าซึ่งมีความหมายเหมือนกันENGINEถูกลบใน MySQL 5.5

เปิด.sqlไฟล์ของคุณค้นหาและแทนที่อินสแตนซ์ทั้งหมด

จากTYPE=ถึงENGINE=

ตอนนี้การนำเข้าควรเป็นไปอย่างราบรื่น


3

การรับข้อผิดพลาดการเรียง # 1273 - การเรียงที่ไม่รู้จัก: 'utf8mb4_unicode_520_ci' เกิดจากความแตกต่างของรุ่น MySQL ที่คุณส่งออกและเซิร์ฟเวอร์ MySQL ของเราที่คุณนำเข้า โดยทั่วไปแล้วไลบรารี Wordpress สำหรับเวอร์ชันใหม่จะตรวจสอบเพื่อดูว่าไซต์ของคุณกำลังรัน SQL เวอร์ชันใดอยู่ หากใช้ MySQL เวอร์ชัน 5.6 ขึ้นไปจะถือว่าการใช้ Unicode Collation Algorithm (UCA) ใหม่และปรับปรุงซึ่งเรียกว่า“ utf8mb4_unicode_520_ci” นี่เป็นสิ่งที่ดีเว้นแต่คุณจะย้ายไซต์ WordPress ของคุณจาก MySQL รุ่นใหม่กว่า 5.6 ไปเป็น MySQL รุ่นเก่ากว่า 5.6

ในการแก้ไขปัญหานี้คุณจะต้องแก้ไขไฟล์ส่งออก SQL และทำการค้นหาและแทนที่โดยเปลี่ยนอินสแตนซ์ทั้งหมดของ 'utf8mb4_unicode_520_ci' เป็น 'utf8mb4_unicode_ci' หรือทำตามขั้นตอนด้านล่างหากคุณมี PHPMyAdmin:

  1. คลิกที่แท็บส่งออกสำหรับฐานข้อมูล
  2. คลิกปุ่มตัวเลือกที่กำหนดเอง
  3. ไปที่หัวข้อหัวข้อตัวเลือกเฉพาะรูปแบบและเปลี่ยนรายการแบบหล่นลงสำหรับระบบฐานข้อมูลหรือเซิร์ฟเวอร์ MySQL รุ่นเก่าเพื่อเพิ่มความเข้ากันได้ของเอาต์พุตด้วย: จาก NONE เป็น MYSQL40
  4. เลื่อนไปที่ด้านล่างและคลิกไป

1

ในกรณีของฉันฉันแทนที่utf8_general_ciด้วย sed เช่นนี้

sed -i 's/utf8_0900_ai_ci/utf8_general_ci/g' MY_DB.sql 
sed -i 's/utf8mb4_unicode_520_ci/utf8_general_ci/g' MY_DB.sql 

หลังจากนั้นฉันสามารถนำเข้าได้โดยไม่มีปัญหาใด ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.