2013-05-20 2 views
0

Я храню таблицу в MySQL с сортировкой utf8_bin. Я хочу выбрать все имена, упорядоченные по алфавиту, используя инструменты Codeigniter active record, но приведенный ниже код сортирует все слова, начинающиеся с заглавной буквы сначала, а затем некапитализированные (они не капитализируются по какой-либо причине).Алфавитный порядок таблицы utf8_bin с Codeigniter

$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, двоичное имя desc'), не работает? – csotelo

+1

нет, потому что он экранирует двоичный код, поэтому запрос становится ORDER BY cast (name as char) asc, 'binary' name desc – Davor

1

Использование $this->db->order_by('lower(name)', 'asc') работал.

Смежные вопросы