# 1273 - Fascicolazione sconosciuta: cPanel 'utf8mb4_unicode_ci'


183

Ho un database WordPress sul mio computer locale che voglio trasferire su un phpMyAdmin ospitato su cPanel. Tuttavia, quando provo a importare il database nell'ambiente, continuo a ricevere questo errore:

#1273 - Unknown collation: 'utf8mb4_unicode_ci' 

Ho provato a cercare Google e l'unica soluzione che posso trovare è questo errore phpmysql - # 1273 - # 1273 - Fascicolazione sconosciuta: 'utf8mb4_general_ci' che per ora non è di grande aiuto. Ho provato a cancellare i cookie ma ancora non funzionerà. Per favore aiuto!


Risposte:


107

Ho avuto lo stesso problema di tutti i nostri server con versioni precedenti di MySQL. Questo può essere risolto eseguendo uno script PHP. Salva questo codice in un file ed eseguilo inserendo il nome del database, l'utente e la password e cambierà le regole di confronto da utf8mb4/utf8mb4_unicode_ciautf8/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
Sembra overkill vsmysqldump --compatible=mysql4
icc97

2
Per me ha funzionato. Ricorda di dare un nome al filedb-convert.php
Fred K

1
Se rendi 'localhost' un input è perfetto.
br4nnigan,

2
mysqldump --compatible=mysql4o la risposta di seguito è un'opzione migliore. Non credo sia saggia cambiare qualcosa di simile su un sito live. Meglio esportare nel formato corretto o, se non è un'opzione, modificare il file esportato.
Tisch,

Quindi mi hai appena salvato la vita e tutto quello che posso darti è un +1.
Taruc,

229

La tecnica in questo post ha funzionato per me

1) Fare clic sulla scheda "Esporta" per il database

2) Fare clic sul pulsante di opzione "Personalizzato"

3) Vai alla sezione "Opzioni specifiche del formato" e modifica il menu a discesa per "Sistema database o server MySQL precedente per massimizzare la compatibilità dell'output con:" da NONE a MYSQL40.

4) Scorri verso il basso e fai clic su "GO".

Non sono sicuro che ciò provochi una perdita di dati, tuttavia nel momento in cui l'ho provato non ne ho notato nessuno. Né ha risposto nessuno nei forum collegati sopra.

Modifica 8/12/16 - Credo che esportare un database in questo modo mi faccia perdere i dati salvati nei widget di Black Studio TinyMCE Visual Editor , anche se non ho eseguito più test per confermare.


non ha funzionato per me, ho ricevuto l'errore # 1231 - La variabile 'character_set_client' non può essere impostata sul valore di 'NULL'
secchione il

Dopo diversi tentativi falliti di altre soluzioni, questo ha funzionato perfettamente al primo tentativo.
Vincent Polisi,

NON funziona con alcuni nuovi siti Wordpress. Quando lo importa sull'altro server, genera questo errore sulla prima tabella che tenta di importare (wp_commentmeta) # 1064 - Hai un errore nella sintassi SQL; controlla il manuale corrispondente alla versione del tuo server MySQL per la sintassi corretta da utilizzare vicino a 'TYPE = MyISAM AUTO_INCREMENT = 1' alla riga 19
that-ben

questo non sembrava fare alcuna differenza per me, continuando a ricevere gli stessi messaggi di errore
pealo86

tu sei il capo
Aseel Ashraf il

159

Se hai già esportato un .sqlfile, la cosa migliore da fare è trovare e sostituire quanto segue se li hai nel tuo file:

  • utf8mb4_0900_ai_ci per utf8_unicode_ci
  • utf8mb4 per utf8
  • utf8_unicode_520_ci per utf8_unicode_ci

Sostituirà utf8mb4_unicode_cia utf8_unicode_ci. Ora si va al vostro phpMyAdmin cPanel e imposta il confronto DB utf8_unicode_citramite Operazioni> fascicolazione .

Se stai esportando in un .sql, è meglio cambiare il formato su come stai esportando il file. Dai un'occhiata a Evster's anwer (è nella stessa pagina di questo)


2
è perfettamente funzionante con questo stackoverflow.com/a/30694416/1022726
iurii

Per tutti voi gente unix: sed -i.bak s/utf8mb4/utf8/g FILE_NAME. Questo troverà tutte le occorrenze di utf8mb4in FILE_NAME e lo sostituirà con utf8mentre si salva una copia del file originale in FILE_NAME.bak. Potrebbe essere necessario modificarlo per specificare l'esatta coalizione nel tuo caso, ma questo è un inizio :)
DaveLak,

1
Ho anche dovuto sostituire: utf8_unicode_520_ci con: utf8_unicode_ci
Nick Rivers

O via VI: vi dump.sqle poi in via fare questo: :%s/uf8mb4/utf8/g.
Valentin Grégoire,

2
e sostituisci utf8_0900_ai_ciconutf8_unicode_ci
Irfan Yusanif l'

44

lo uso in 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

quindi ripristina your_file.sql

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

1
C'è un commento su un'altra risposta, che vale la pena ripetere qui. La versione OS X di sed richiede un argomento in più dopo il flag -i. Quindi sed -i '' ....funziona.
Kent,

2
Ho dovuto eseguire anche questo:sed -i 's/utf8_0900_ai_ci/utf8_general_ci/g' your_file.sql
Michael Hays l'

28

Wordpress 4.2 ha introdotto il supporto per la codifica dei caratteri "utf8mb4" per motivi di sicurezza , ma solo MySQL 5.5.3 e versioni successive lo supportano. Il modo in cui il programma di installazione (e il programma di aggiornamento) gestisce questo è che controlla la tua versione di MySQL e il tuo database verrà aggiornato a utfmb4 solo se è supportato .

In teoria sembra fantastico, ma il problema (come hai scoperto) è quando si esegue la migrazione di database da un server MySQL che supporta utf8mb4 a uno che non lo fa. Mentre il contrario dovrebbe funzionare, è fondamentalmente un'operazione a senso unico.

Come sottolineato da Evster, potresti avere successo utilizzando la funzione "Esporta" di PHPMYAdmin. Utilizzare " Metodo di esportazione: personalizzato " e per " Sistema database o server MySQL precedente per massimizzare la compatibilità dell'output con: " selezionare " MYSQL 40 ".

Per un'esportazione da riga di comando utilizzando mysqldump. Dai un'occhiata alla bandiera:

$ mysqldump --compatible=mysql4

Nota: se nel database sono presenti caratteri a 4 byte, verranno danneggiati.

Infine, per chiunque utilizzi il popolare plug-in WP Migrate DB PRO, un utente in questo thread di Wordpress.org riporta che la migrazione viene sempre gestita correttamente ma non sono riuscito a trovare nulla di ufficiale.

Il plug-in WP Migrate DB traduce il database da un confronto all'altro quando sposta 4.2 siti tra host con MySQL pre o post 5.5.3

Al momento, non sembra esserci un modo per annullare l'aggiornamento del database. Quindi, se stai usando un flusso di lavoro in cui stai migrando un sito da un server o localhost con MySQL> 5.5.3 a uno che utilizza una versione precedente di MySQL, potresti essere sfortunato.


La modifica della compatibilità con "MYSQL 40" ha funzionato totalmente per me.
Keryn Gill,

3
Se poi provi a importare il dump compatibile mysql4 in un database post v5.5.3 (sto usando 5.5.28), allora fallisce perché lo script include TYPE=MyISAMche è stato rimosso nella v5.1. Effettua una ricerca e sostituisci con ENGINE=MyISAM. Non ho potuto vedere un modo per aggirare questo usando le mysqldumpopzioni di output.
icc97,

26

Nel mio caso risulta che il mio
nuovo server era in esecuzione MySQL 5.5, il
vecchio server era in esecuzione MySQL 5.6.
Quindi ho riscontrato questo errore durante il tentativo di importare il .sqlfile che avevo esportato dal mio vecchio server.

MySQL 5.5 non supporta utf8mb4_unicode_520_ci, ma
MySQL 5.6 lo supporta .

L'aggiornamento MySQL 5.6sul nuovo server ha risolto l'errore di confronto!

Se si desidera conservare MySQL 5.5, è possibile:
- creare una copia del .sqlfile esportato
- sostituire le istanze di utf8mb4unicode520_cie utf8mb4_unicode_520_ci
... con utf8mb4_unicode_ci
- importare il .sqlfile aggiornato .


1
Sì, il caricamento su 5.6 è la soluzione più semplice per questo (e Ubuntu ha un mysql-server-5.6pacchetto che puoi installare che rimuoverà automaticamente 5.5 per te).
William Turrell,

15

C'è una riga in wp-config.php:

define('DB_CHARSET', 'utf8mb4');

Se segui le istruzioni di Markouver / Evster , non dimenticare di cambiare questa riga sul server di produzione in

define('DB_CHARSET', 'utf8');

per correggere i caratteri a 4 byte rotti


1
Inoltre, non dimenticare di modificare define('DB_COLLATE', 'utf8_general_ci');anche. Questo mi ha aiutato.
Abduhafiz,

10

Dopo una lunga ricerca ho trovato la soluzione sopra:

  1. Innanzitutto si modifica l'impostazione predefinita wp-config.php> Database DB_CHARSET in "utf8"

  2. Fai clic sulla scheda "Esporta" per il database

  3. Fai clic sul pulsante di opzione "Personalizzato"

  4. Vai alla sezione "Opzioni specifiche del formato" e modifica il menu a discesa per "Sistema di database o server MySQL precedente per massimizzare la compatibilità dell'output con:" da NONE a MYSQL40.

  5. Scorri verso il basso e fai clic su Vai

Allora sei su.


7

Sembra che il tuo host non fornisca una versione di MySQL in grado di eseguire tabelle con regole di confronto utf8mb4.

Le tabelle di WordPress sono state modificate in utf8mb4 con la versione 4.2 (rilasciata il 23 aprile 2015) per supportare Emojis, ma è necessario MySQL 5.5.3 per usarlo.5.5.3. è del marzo 2010, quindi dovrebbe essere ampiamente disponibile. Cna controlli se il tuo hoster fornisce quella versione?

In caso contrario, e un aggiornamento non è possibile, potresti dover cercare un altro hoster per eseguire le ultime versioni di WordPress (e dovresti sempre farlo per motivi di sicurezza).


1
Puoi controllare la tua versione di MySQL dalla riga di comando con "mysql -V"
Edd Smith,

2

Quindi ho risolto in questo modo, da MySQL 5.6 a 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

(Facoltativo) Crea un .sql.gzfile:

$ gzip database_name.sql 

Spiegazione

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

Come spiegato in questa risposta , questo è solo l'equivalente di queste opzioni di phpMyAdmin: "Sistema di database o server MySQL precedente per massimizzare la compatibilità dell'output con:" selezionare l'elenco a discesa "MYSQL 40" .

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

Ne abbiamo bisogno, per risolvere questo problema:

ERRORE 1064 (42000) alla riga 18: si è verificato un errore nella sintassi SQL; controlla il manuale corrispondente alla versione del tuo server MySQL per la sintassi corretta da usare vicino a 'TYPE = InnoDB' alla riga 9


1
Nota se si sta utilizzando la versione di OS X di sed: $ sed -i'' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql. Se si desidera conservare una copia come database_name.sql.bakprima della sostituzione di sed:$ sed -i'bak' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql
Justin Fortier,

puoi anche inline sed.
davidbitton,

Inoltre, se stai eseguendo mysqldump su MySQL 8, devi utilizzare l' --compatible=ansiopzione
AbstractVoid del

1

Ho riscontrato anche questo problema. La soluzione che ha funzionato per me è stata l'apertura del database locale con Sequel Pro e l'aggiornamento di Encoding and Collation a utf8 / utf8_bin per ogni tabella prima dell'importazione.


1

Il modo più semplice per farlo è esportare il database in .sql, aprirlo su Notepad ++ e "Cerca e sostituisci" il utf8mb4_unicode_cito utf8_unicode_cie anche sostituire utf8mb4in utf8. Inoltre, non dimenticare di modificare le regole di confronto del database in utf8_unicode_ci(Operazioni> Fascicolazione).


0

aprire il file sql su Notepad ++ e ctrl + H. quindi inserire " utf8mb4" nella ricerca e " utf8" in sostituzione. Il problema verrà quindi risolto.


Dice "unknown collation utf8"
Cristian Traìna,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.