2011-11-05 71 views
0

我已經在我的symfony窗​​體中設置了一個post驗證器來停止主鍵的重複。sfValidatorDoctrineUnique失敗,大寫字母

在這種情況下,主鍵是兩個字符的字符串。用於驗證的代碼:

$this->mergePostValidator(new sfValidatorDoctrineUnique(array(
    'model' => 'Manufacturers', 
    'column' => 'id', 
    'primary_key' => 'id' 
))); 

主鍵是大寫的(例如AU)。奇怪的是,後驗證器成功觸發小寫字母'au'被輸入到字段中(即阻止它進入數據庫並觸發500完整性約束錯誤),但是如果正確輸入爲'AU',它似乎沒有注意到複製。

有什麼想法?

+0

真的不明白的問題。如果你問「sfValidatorDoctrineUnique()是否區分大小寫?」那麼答案是「是」,因爲數據庫也可以區分大小寫。 –

+0

@Blowski:我認爲OP在說代碼不完全相同時會觸發約束('au' vs'AU'),但當它完全相同時(AU和AU相同)這確實是。 – greg0ire

+0

你使用什麼排序規則來填充id列? –

回答

3

這不是一個symfony sfDoctrineValidator問題。這個驗證器所做的就是在數據庫中搜索現有記錄。如果您使用的是「_ci」(不區分大小寫)排序規則(您是否使用mysql?),則搜索不會返回任何內容 - 驗證程序會被愚弄。

然後當你插入重複的時候,你會從數據庫中得到一個異常。嘗試改變你的表的排序是這樣的:

ALTER TABLE `table` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 

(你應該告訴學說來爲你做它:

MyTable: 
    options: { collate: utf8_bin, charset: utf8 }