2011-08-16 38 views
1

結束VARCHAR鍵我已經定義了一個表等MySQL不匹配的數

CREATE TABLE `mytable` (
    `identifier` varchar(45) NOT NULL, 
    `f1` char(1) NOT NULL, 
    KEY `identifier` (`identifier`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

,然後加入主鍵和索引作爲

ALTER TABLE `mytable` ADD PRIMARY KEY (`identifier`) 
ALTER TABLE `mytable` ADD INDEX (`identifier`) 

在標識符字段我的表是(大約800,000條記錄)

USER01-TESTXXY-CAD-10172 
USER01-TESTXXY-CAD-1020 
USER01-TESTXXY-CAD-10245 
USER02-TEST-003-SUBA 
USER02-TEST-002-SUBB 

我發現標識符結束的查詢與一些不匹配:

SELECT * 
FROM identifier 
WHERE identifier = 'USER01-TESTXXY-CAD-10245'; 

,但其匹配以字母結尾的標識查詢匹配成功

SELECT * 
FROM identifier 
WHERE identifier = 'USER02-TEST-003-SUBA'; 

我查詢確切的說,我並不需要想比較,因爲我的用戶提供給我確切的字符串除了varchar(45)還有足夠的空間來存放我的標識符。 我做錯了什麼?可能是什麼原因或解決方案?

+3

與問題無關,但您不需要在標識符上添加索引,因爲主鍵已經是索引。嘗試運行優化表並重新測試。 –

+2

確保標識符後面字符串的末尾沒有隱藏字符。 (其他事物的換行符)。您是否最後手動添加了帶有數字的字符串? (我測試過它,它的工作原理) –

+0

我測試過這個,也適用於我。 –

回答

1

我認爲你在這兩個查詢中都犯了一個錯字。你的表名應該是mytable而不是標識符。

SELECT * 
FROM mytable 
WHERE identifier = 'USER01-TESTXXY-CAD-10245'; 

這是一個錯字嗎? 數據庫中是否存在另一個稱爲標識符的表?