Domanda

Ho un database che è attualmente in esecuzione su un server 5.0.27. Voglio passare a un nuovo server 5.1.41.

I mysqldump'd tutti i file. Durante il ripristino, ottengo un errore

ERROR 1062 (23000) at line 21: Duplicate entry 'weiÃ' for key 'title'

ho ristretto il basso mancato questo script, che posso correre e viene a mancare:

--
-- Table structure for table `word`
--

set names utf8;

DROP TABLE IF EXISTS `word`;
CREATE TABLE `word`
(
  `wordid` int (10) unsigned NOT NULL auto_increment,
  `title` char (50) NOT NULL default '',
  PRIMARY KEY  (`wordid`),
  UNIQUE KEY `title` (`title`)
) ENGINE=MyISAM AUTO_INCREMENT=280707 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

--
-- Dumping data for table `word`
--

LOCK TABLES `word` WRITE;
INSERT INTO `word` VALUES
(198036,'weis'),
(241473, unhex('776569C39F'));
UNLOCK TABLES;

Modifica -. Cambiato in UNHEX

ho controllato e ricontrollato tutte le variabili del set di caratteri e di collazione tra i due server, e sembrano identici. Anche se non lo fossero, sto specificando le regole di confronto me stesso.

Le eventuali indizi utili a capire quello che sto facendo male qui?

EDIT: ecco il comando che sto usando per il dump del database:

mysqldump --add-drop-table --add-locks --disable-keys --lock-tables --quick  -uusername -ppassword database > filename

e al carico

mysql -D$MYSQL_DB -u$MYSQL_USER -p$MYSQL_PASSWD < filename

Come posso controllare le regole di confronto per le connessioni client?

È stato utile?

Soluzione 2

Da un compagno su LiveJournal, ho scoperto che si tratta di un bug "fix" tra il 5.0 e 5.1: Hanno cambiato le regole di confronto. Se andate a leggere la segnalazione di bug, in realtà ha rotto è (Weis e weiss non dovrebbe essere equivalente). Ma non stanno andando a Unbreak esso. Quindi io sia necessario cambiare le regole di confronto (come suggerisce Dave Orr), o manualmente modificare i miei dati.

http://bugs.mysql.com/bug.php?id=27877

Altri suggerimenti

Il problema specifico è che in utf8_general_ci, 'weis' e 'weiß' sono equivalenti. Se si vuole 'weiß' essere uguale a 'weiss', allora dovreste usare utf8_unicode_ci. Che risolverà il problema sul lato delle importazioni (a meno che non si dispone di 'weiss' nel database, ma poi avete veramente un duplicato).

A occhio e croce, la tabella originale ha impostato utf8_unicode_ci, e non hai notato la differenza. Se questo non è vero, non ho idea di come il vostro tavolo ottenuto nello stato è in - ma il passaggio per la collazione destra dovrebbe risolvere il problema

.

Si sta utilizzando il mysqldump & mysql dal 5,1 di 5,0?
si potrebbe provare diverse combo.

Potrebbe la SourceDB contenere valori duplicati nella colonna "unico"?
Rimuovere il vincolo "UNIQUE KEY" e verifica che i record sono duplicati nel TargetDB.
Questo potrebbe dare un po 'di comprensione del problema.

Specifica il set di caratteri dall'opzione --default-character-set. E 'importante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top