Pregunta

Tengo una base de datos que se están ejecutando en un servidor 5.0.27. Quiero pasar a un nuevo servidor 5.1.41.

Me mysqldump'd todos los archivos. Al restaurar, me sale un error

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

He reducido el down fracaso en este guión, que puedo correr y se produce un error:

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

EDITAR -. Cambiado a UNHEX

He comprobado y vuelto a comprobar todas las variables de conjunto de caracteres y la colación entre los dos servidores, y se ven idénticos. Incluso si no lo eran, estoy especificando el cotejo a mí mismo.

Cualquier pistas sobre lo que estoy haciendo mal aquí?

Edit: aquí está el comando que estoy usando para volcar la base de datos:

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

y a la carga

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

¿Cómo puedo comprobar las colaciones para las conexiones de cliente?

¿Fue útil?

Solución 2

A partir de un compañero en LiveJournal, descubrí que es una "solución" error entre 5.0 y 5.1: Se ha cambiado la colación. Si usted lee el informe de error, que en realidad rompieron que (Weis y Weiss no debería ser equivalente). Pero no van a unbreak ella. Así que o bien tienen que cambiar la intercalación (como sugiere David Orr), o manualmente editar mis datos.

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

Otros consejos

El problema específico es que en utf8_general_ci, 'weis' y 'Weiss' son equivalentes. Si quieres 'Weiss' para que sea igual a 'Weiss', entonces debería usar utf8_unicode_ci. Eso va a solucionar el problema en el lado de las importaciones (a menos que tenga 'Weiss' en la base de datos, pero entonces usted realmente tiene un duplicado).

En una conjetura, la tabla original tiene utf8_unicode_ci conjunto, y no se dio cuenta de la diferencia. Si eso no es verdad, no tengo ni idea de cómo su mesa se metió en el estado en que está en - pero el cambio a la colación correcta debería resolver su problema

.

¿Está utilizando el mysqldump y mysql de 5.1 de 5.0?
puede probar diferentes combos.

Podría el SourceDB contener valores duplicados en la columna "único"?
Retire la restricción "Clave única" y cheque que los registros son duplicados en el TargetDB.
Esto podría dar alguna información sobre el problema.

Especifica el conjunto de caracteres por la opción --default-character-set. Es importante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top