# 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!

Wairimu Murigi
sumber
Apa versi WordPress? Lihat make.wordpress.org/core/2015/04/02/the-utf8mb4-upgrade
Rick James

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>";
}

?>
Stephen
sumber
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.

Evster
sumber
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)

Rangel R. Morais
sumber
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
halilintar8
sumber
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.

Mark Thomson
sumber
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 .

SherylHohman
sumber
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

Isk1n
sumber
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.

Dead Boyz
sumber
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).

flomei
sumber
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

Andrea
sumber
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

Saya juga mengalami masalah ini. Solusi yang berhasil bagi saya adalah membuka database lokal dengan Sequel Pro dan memperbarui Encoding and Collation ke utf8 / utf8_bin untuk setiap tabel sebelum mengimpor.

Damian Walsh
sumber
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).

Brane
sumber
0

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

John
sumber
Dikatakan "collation utf8 tidak dikenal"
Cristian Traìna