2011-04-06 2 views
2

Cette requête particulière est supposée entrer l'utilisateur dans la base de données.Comportement inattendu de la requête

Cette requête n'insère pas toujours les valeurs des champs prénom et nom avec d'autres. Le prénom et le nom sont vides pour quelques insertions et pour les autres, il fonctionne comme prévu.

 
INSERT INTO `users` (mobile, passwordHash, firstname, lastname, ent_id, email) 
VALUES ('913800341127', '678a1491514b7f1006d605e9161946b1', 'nat', 'sam', '108', NULL) 
ON DUPLICATE KEY UPDATE `firstname` = VALUES(firstname),`lastname` = VALUES(lastname) 

Infos connexes:

 
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment, 
`tag` varchar(5) NOT NULL default 'ind', 
`username` varchar(50) default NULL, 
`firstname` varchar(100) default NULL, 
`lastname` varchar(100) default NULL, 
`passwordhash` varchar(255) NOT NULL, 
`secretq` varchar(255) default NULL, 
`secreta` varchar(100) default NULL, 
`email` varchar(50) default NULL, 
`mobile` varchar(13) default NULL, 
`last_login` datetime default NULL, 
`ent_id` bigint(20) NOT NULL default '1', 
`is_inactive` tinyint(1) NOT NULL COMMENT 'Whether the user is active or not', 
PRIMARY KEY (`id`), 
UNIQUE KEY `mobile_2` (`mobile`,`ent_id`), 
UNIQUE KEY `email_2` (`email`,`ent_id`), 
KEY `username` (`username`), 
KEY `ent_id` (`ent_id`,`tag`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 
+1

Mon pari serait que cela se produit lorsque le nom d'utilisateur contient des caractères non-ASCII, qui sont venir dans un encodage autre que latin1 (comme UTF-8) et casser la chaîne tout à fait. Vous devrez ajouter plus d'informations sur l'origine de vos données. –

+0

Que pouvez-vous nous dire sur les cas où cela échoue? Est-ce que les mêmes données échouent toujours au même endroit? Est-ce qu'il échoue sous une charge élevée? Des erreurs ou des avertissements dans les journaux? –

+0

Pouvez-vous répondre à votre propre question d'une manière qui aiderait les autres? Si vous le faites, vous pouvez sélectionner le vôtre comme réponse correcte. Cela peut sembler étrange, mais il est préférable de supprimer dans des situations comme celle-ci. – Will

Répondre

1

erreur de syntaxe il devrait être:

ON DUPLICATE KEY UPDATE firstname = 'nat',lastname = 'sam'