2010-01-06 22 views
1

我有一個表與名爲「標籤」只是一個單一的場,其(250)MySQL不採取修飾考慮驗證索引關鍵字的唯一性

字段被定義與歸類「latin1_spanish_ci」一個varchar ,因爲我正打算救的話在西班牙...

的問題是,下面的查詢

select * from test where tag = 'unó' 

給了我完全一樣的結果

select * from test where tag = 'uno' 

就是爲MySQL, 'UNO'= 'UNO' ......和 ​​'UNO' 和 'UNO' ...等...

此字段supossed有一個唯一的關鍵.. 。

我與他人的歸類嘗試,所有的「bin」歸類似乎工作,也latin1_general_ci太...

我只是想知道,如果這將是此時,相應的排序規則爲每一個選擇數據庫中的字段,或者如果我可能會面臨任何麻煩選擇它...考慮到我打算在該數據庫中存儲西班牙語數據...

個saludos

SAS

PS:無論如何,這似乎非常奇怪的是,在西班牙整理口音可以被視爲毫無意義......

-

編輯:我做了幾個測試,我用數據輸入數據,看起來像mysql可以真正處理它們...

回答

1

你可以使用latin1_general_ci作爲默認數據庫/表/列排序規則,並指定latin1_spanish_ci每個選擇的基礎上需要的地方:

select * from test order by tag collate latin1_spanish_ci; 
select * from test where tag = 'uno' collate latin1_spanish_ci; 

由於「O」,「O」等被認爲是平等的latin1_spanish_ci,如果表中包含eg 'uno','unó'和'unò'。

0

排序規則不用於定義列中數據的語言。它用於定義如何將不同的字母或多個字母/代碼點定義爲相同(比較順序和相等)。

「latin1_spanish_ci」的'ci'後綴表示'不區分大小寫'。

如果您希望能夠區分任何突出顯示的字母和任何大小寫,則以語言名稱命名的排序規則不適用。改爲使用'* _bin'排序規則。

請注意,在執行查詢時使用不同的排序規則,而不是在數據庫中應用的默認排序規則。請參閱CONVERT函數。