# 1273 - Pengumpulan yang tidak diketahui: 'utf8mb4_unicode_ci' cPanel


183

Saya memiliki database WordPress di mesin lokal saya yang ingin saya transfer ke phpMyAdmin yang dihosting di cPanel. Namun, ketika saya mencoba mengimpor database ke lingkungan, saya terus mendapatkan kesalahan ini:

#1273 - Unknown collation: 'utf8mb4_unicode_ci' 

Saya telah mencoba Google sekitar dan satu-satunya solusi yang dapat saya temukan adalah kesalahan satu phpmysql ini - # 1273 - # 1273 - Kolaborasi tidak dikenal: 'utf8mb4_general_ci' yang saat ini tidak banyak membantu. Saya sudah mencoba menghapus cookie tetapi tetap tidak berhasil. Tolong bantu!


Jawaban:


107

Saya memiliki masalah yang sama dengan semua server kami menjalankan versi MySQL yang lebih lama. Ini dapat diatasi dengan menjalankan skrip PHP. Simpan kode ini ke file dan jalankan memasukkan nama database, pengguna dan kata sandi dan itu akan mengubah susunan dari utf8mb4/utf8mb4_unicode_cimenjadiutf8/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
Ini sepertinya berlebihan vsmysqldump --compatible=mysql4
icc97

2
Bagi saya itu berhasil. Ingatlah untuk memberi nama filenyadb-convert.php
Fred K

1
Jika Anda menjadikan 'localhost' sebagai input, itu sempurna.
br4nnigan

2
mysqldump --compatible=mysql4atau jawaban di bawah adalah opsi yang lebih baik. Saya tidak berpikir itu ide yang bijaksana untuk mengubah sesuatu seperti ini di situs langsung. Lebih baik mengekspor dalam format yang benar, atau jika itu bukan opsi, edit file yang diekspor.
Tisch

Jadi Anda baru saja menyelamatkan hidup saya, dan yang bisa saya berikan kepada Anda rn adalah +1.
Taruc

229

Teknik dalam posting ini berhasil untuk saya

1) Klik tab "Ekspor" untuk basis data

2) Klik tombol radio "Kustom"

3) Buka bagian berjudul "Opsi spesifik format" dan ubah dropdown untuk "Sistem basis data atau server MySQL yang lebih lama untuk memaksimalkan kompatibilitas keluaran dengan:" dari NONE ke MYSQL40.

4) Gulir ke bawah dan klik "GO".

Saya tidak yakin apakah ini menyebabkan hilangnya data, namun dalam satu kali saya mencobanya saya tidak melihat adanya. Tidak seorang pun yang merespons di forum yang ditautkan di atas.

Sunting 8/12/16 - Saya percaya mengekspor database dengan cara ini menyebabkan saya kehilangan data yang disimpan di widget Editor Visual Studio TinyMCE , meskipun saya belum menjalankan beberapa tes untuk mengonfirmasi.


tidak berfungsi untuk saya, saya mendapatkan kesalahan # 1231 - Variabel 'character_set_client' tidak dapat disetel ke nilai 'NULL'
nerdess

Setelah beberapa upaya gagal pada solusi lain, yang ini bekerja dengan sempurna pada upaya pertama.
Vincent Polisi

TIDAK bekerja dengan beberapa situs Wordpress baru. Ketika mengimpornya di server lain, itu menghasilkan kesalahan ini pada tabel pertama mencoba untuk mengimpor (wp_commentmeta) # 1064 - Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MySQL Anda untuk sintaks yang tepat untuk digunakan di dekat 'TYPE = MyISAM AUTO_INCREMENT = 1' pada baris 19
that-ben

ini sepertinya tidak membuat perbedaan bagi saya, masih mendapatkan pesan kesalahan yang sama
pealo86

Anda adalah bosnya
Aseel Ashraf

159

Jika Anda sudah mengekspor .sqlfile, hal terbaik yang harus dilakukan adalah Menemukan dan Mengganti yang berikut jika ada di file Anda:

  • utf8mb4_0900_ai_ci untuk utf8_unicode_ci
  • utf8mb4 untuk utf8
  • utf8_unicode_520_ci untuk utf8_unicode_ci

Itu akan diganti utf8mb4_unicode_cimenjadi utf8_unicode_ci. Sekarang Anda pergi ke phpMyAdmin cPanel Anda dan atur DB collation utf8_unicode_cimelalui Operations> Collation .

Jika Anda mengekspor ke .sql, lebih baik mengubah format tentang cara Anda mengekspor file. Simak jawaban Evster (ada di halaman yang sama dengan ini)


2
itu bekerja dengan baik bersama dengan ini stackoverflow.com/a/30694416/1022726
iurii

Untuk semua Anda unix orang: sed -i.bak s/utf8mb4/utf8/g FILE_NAME. Ini akan menemukan semua kemunculan utf8mb4di FILE_NAME dan menggantinya dengan utf8saat menyimpan salinan file asli ke FILE_NAME.bak. Anda mungkin perlu men-tweak untuk menentukan koalisi yang tepat dalam kasus Anda, tetapi ini adalah awal :)
DaveLak

1
Saya juga harus mengganti: utf8_unicode_520_ci dengan: utf8_unicode_ci
Nick Rivers

Atau melalui vi: vi dump.sqldan kemudian di melalui melakukan ini: :%s/uf8mb4/utf8/g.
Valentin Grégoire

2
dan ganti utf8_0900_ai_cidenganutf8_unicode_ci
Irfan Yusanif

44

saya menggunakan ini di linux:

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

lalu kembalikan file_anda.sql Anda

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

1
Ada komentar pada jawaban lain, yang berulang di sini. Versi OS X sed membutuhkan argumen tambahan setelah flag -i. Begitu sed -i '' ....berhasil.
Kent

2
Saya harus menjalankan ini juga:sed -i 's/utf8_0900_ai_ci/utf8_general_ci/g' your_file.sql
Michael Hays

28

Wordpress 4.2 memperkenalkan dukungan untuk pengkodean karakter "utf8mb4" untuk alasan keamanan , tetapi hanya MySQL 5.5.3 dan yang lebih besar mendukungnya. Cara installer (dan updater) menangani ini adalah memeriksa versi MySQL Anda dan database Anda akan ditingkatkan ke utfmb4 hanya jika didukung .

Ini kedengarannya hebat secara teori tetapi masalahnya (seperti yang Anda temukan) adalah ketika Anda memigrasi database dari server MySQL yang mendukung utf8mb4 ke yang tidak. Sementara sebaliknya harus bekerja, itu pada dasarnya operasi satu arah.

Seperti yang ditunjukkan oleh Evster, Anda mungkin berhasil menggunakan fitur "Ekspor" PHPMYAdmin. Gunakan " Metode Ekspor: Kustom " dan untuk " Sistem basis data atau server MySQL yang lebih lama untuk memaksimalkan kompatibilitas keluaran dengan: " pilih dropdown " MYSQL 40 ".

Untuk ekspor baris perintah menggunakan mysqldump. Lihatlah bendera:

$ mysqldump --compatible=mysql4

Catatan: Jika ada karakter 4-byte dalam database mereka akan rusak.

Terakhir, bagi siapa pun yang menggunakan plugin WP Migrate DB PRO yang populer, pengguna di utas Wordpress.org ini melaporkan bahwa migrasi selalu ditangani dengan benar tetapi saya tidak dapat menemukan yang resmi.

Plugin WP Migrate DB menerjemahkan database dari satu collation ke collation lainnya ketika memindahkan 4.2 situs antara host dengan pre atau post-5.5.3 MySQL

Saat ini, tampaknya tidak ada cara untuk keluar dari pembaruan basis data. Jadi jika Anda menggunakan alur kerja tempat Anda memigrasikan situs dari server atau localhost dengan MySQL> 5.5.3 ke yang menggunakan versi MySQL yang lebih lama, Anda mungkin kurang beruntung.


Mengubah kompatibilitas ke "MYSQL 40" benar-benar berhasil untuk saya.
Keryn Gill

3
Jika Anda kemudian mencoba dan mengimpor dump yang kompatibel dengan mysql4 ke dalam database post v5.5.3 (saya menggunakan 5.5.28) maka gagal karena script menyertakan TYPE=MyISAMyang dihapus pada v5.1. Lakukan pencarian dan ganti dengan ENGINE=MyISAM. Saya tidak bisa melihat jalan keluar dengan menggunakan mysqldumpopsi output.
icc97

26

Dalam kasus saya ternyata
server baru saya sedang berjalan MySQL 5.5,
server lama sedang berjalan MySQL 5.6.
Jadi saya mendapatkan kesalahan ini ketika mencoba mengimpor .sqlfile yang saya ekspor dari server lama saya.

MySQL 5.5 tidak mendukung utf8mb4_unicode_520_ci, tetapi
MySQL 5.6 tidak.

Memperbarui ke MySQL 5.6pada server baru memecahkan kesalahan pemeriksaan!

Jika Anda ingin mempertahankan MySQL 5.5, Anda dapat:
- membuat salinan .sqlfile yang diekspor
- mengganti instance utf8mb4unicode520_cidan utf8mb4_unicode_520_ci
... dengan utf8mb4_unicode_ci
- mengimpor .sqlfile yang diperbarui .


1
Ya - mengunggah ke 5.6 adalah solusi paling sederhana untuk ini (dan Ubuntu memiliki mysql-server-5.6paket yang dapat Anda instal yang akan menghapus 5.5 untuk Anda secara otomatis).
William Turrell

15

Ada baris di wp-config.php:

define('DB_CHARSET', 'utf8mb4');

Jika Anda mengikuti petunjuk Markouver / Evster , jangan lupa untuk mengubah jalur ini di server produksi menjadi

define('DB_CHARSET', 'utf8');

untuk memperbaiki karakter 4 byte yang rusak


1
Juga jangan lupa untuk memodifikasi define('DB_COLLATE', 'utf8_general_ci');juga. Ini membantu saya.
Abduhafiz

10

Setelah penelitian lama saya telah menemukan solusi untuk di atas:

  1. Pertama, Anda mengubah wp-config.php> Database DB_CHARSET default ke "utf8"

  2. Klik tab "Ekspor" untuk basis data

  3. Klik tombol radio "Kustom"

  4. Buka bagian berjudul "Opsi spesifik format" dan ubah dropdown untuk "Sistem basis data atau server MySQL yang lebih lama untuk memaksimalkan kompatibilitas keluaran dengan:" dari NONE ke MYSQL40.

  5. Gulir ke bawah dan klik go

Kemudian Anda aktif.


7

Sepertinya host Anda tidak menyediakan versi MySQL yang mampu menjalankan tabel dengan susunan utf8mb4.

Tabel WordPress diubah menjadi utf8mb4 dengan Versi 4.2 (dirilis pada 23 April 2015) untuk mendukung Emoji, tetapi Anda memerlukan MySQL 5.5.3 untuk menggunakannya. 5.5.3. dari Maret 2010, jadi biasanya harus tersedia secara luas. Bisakah Anda memeriksa apakah hoster Anda menyediakan versi itu?

Jika tidak, dan peningkatan tidak dimungkinkan, Anda mungkin harus mencari hoster lain untuk menjalankan versi WordPress terbaru (dan Anda harus selalu melakukannya untuk alasan keamanan).


1
Anda dapat memeriksa versi MySQL Anda melalui baris perintah dengan "mysql -V"
Edd Smith

2

Jadi saya memecahkan dengan cara ini, dari MySQL 5.6 ke 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

(Opsional) Buat .sql.gzfile:

$ gzip database_name.sql 

Penjelasan

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

Seperti dijelaskan dalam jawaban ini , ini hanya setara dengan opsi ini dari phpMyAdmin: "Sistem database atau server MySQL yang lebih lama untuk memaksimalkan kompatibilitas keluaran dengan:" pilih dropdown "MYSQL 40" .

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

Kami membutuhkan ini, untuk menyelesaikan masalah ini:

GALAT 1064 (42000) pada baris 18: Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MySQL Anda untuk sintaks yang tepat untuk digunakan di dekat 'TYPE = InnoDB' di baris 9


1
Catatan jika Anda menggunakan versi OS X dari sed: $ sed -i'' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql. Jika Anda ingin menyimpan salinan seperti database_name.sql.baksebelum menggantikan:$ sed -i'bak' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql
Justin Fortier

Anda juga bisa sebaris sed.
davidbitton

Juga jika Anda menjalankan mysqldump di MySQL 8, Anda perlu menggunakan --compatible=ansiopsi
AbstractVoid


1

Cara termudah untuk dilakukan adalah mengekspor database Anda ke .sql, buka di Notepad ++ dan "Cari dan Ganti" utf8mb4_unicode_cike utf8_unicode_cidan juga ganti utf8mb4ke utf8. Juga jangan lupa untuk mengubah susunan basis data ke utf8_unicode_ci(Operasi> Kolasi).


0

buka file sql pada Notepad ++ dan ctrl + H. Kemudian Anda " utf8mb4" mencari dan " utf8" ganti. Masalahnya akan diperbaiki kemudian.


Dikatakan "collation utf8 tidak dikenal"
Cristian Traìna
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.