2011-04-06 71 views
2

該特定查詢應該將用戶輸入到數據庫中。查詢的意外行爲

該查詢並不總是插入名字和姓氏字段的值以及其他字段。名字和姓氏在一些插入中是空的,而其他的則按預期工作。

 
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) 

相關信息:

 
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

我的選擇將是這種情況的發生,當用戶名包含非ASCII字符,這是進入latin1以外的其他編碼(如UTF-8)並完全中斷字符串。您需要添加更多關於數據來源的信息。 – 2011-04-06 13:19:01

+0

你能告訴我們關於它失敗的情況嗎?相同的數據總是在同一個地方失敗嗎?它在高負荷下失效嗎?日誌中的任何錯誤或警告? – 2011-04-06 13:20:43

+0

你能以一種可以幫助別人的方式回答你自己的問題嗎?如果你這樣做,你可以選擇你的正確答案。這可能看起來很奇怪,但在這種情況下,最好刪除它。 – Will 2011-04-06 14:43:15

回答

1

語法錯誤它應該是:

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