2013-05-20 36 views
0

我使用排序規則utf8_bin在MySQL中存儲表。我想選擇使用Codeigniter的active record工具按字母順序排列的所有名稱,但下面的代碼將首先以大寫字母開頭的所有單詞進行排序,然後是非大寫字母(由於某種原因,它們不會大寫)。使用Codeigniter按字母順序排列的utf8_bin表

$this->db->select('name') 
    ->from('partners') 
    ->order_by('name', 'asc') 
    ->get() 
    ->result(); 

我讀到,使用ORDER BY name COLLATE utf8_general_ci;會使排序不區分大小寫,而不必更改我的表排序規則。 Codeigniter有沒有辦法做到這一點?這很可能是許多表格所必需的,我想避免在我的查詢中使用LOWER(name)作爲附加列來排序。

+0

如果您在查詢中即時更改自動排序規則,會極大地降低您的性能。如果有可能永久更改您的排序規則。 –

+0

通過降低性能很多順序使用較低(名稱)? – Davor

+0

你必須以此爲基準,但我認爲是。 –

回答

0

試試這個:

order by cast(name as char) asc, binary name desc 
+0

使用這給了一個「我的SQL語法錯誤」。但是使用$ this-> db-> order_by('lower(name)','asc')工作。 – Davor

+0

$ this-> db-> order_by('cast(name as char)asc,binary name desc')不起作用? – csotelo

+1

不,因爲它轉義二進制,所以查詢變成ORDER BY cast(name as char)asc,'binary'name desc – Davor

1

使用$this->db->order_by('lower(name)', 'asc')工作。