Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > DISTINCT или ORDER BY с учетом регистра


Автор: GrafF812 28.3.2011, 16:35
Здравствуйте. У меня следующая проблема. Есть такая таблица
Код

кассир
бригадир
кассир 5
Кассир 5
бригадир

Мне нужно получить такую выборку:
Код

бригадир
касср
кассир 5
Кассир 5

Однако при использовании такого запроса:
Код

SELECT DISTINCT name FROM person ORDER BY name

я получаю следующее:
Код

бригадир
кассир
Кассир 5

Т.е "Кассир 5" и "кассир 5" от слил в одно, а мне нужно учитывать регистр. Есть ли какие-нибудь способы?

Автор: Akina 28.3.2011, 17:01
Используй binary collation

Автор: skyboy 28.3.2011, 18:16
не проверил, но думаю, что http://dev.mysql.com/doc/refman/5.0/en/charset-convert.html справится.
Код

SELECT DISTINCT convert(name using utf8_bin)
FROM person 
ORDER BY name


Добавлено через 30 секунд
собственно, это иллюстрация к уже сказанному Akina:
Цитата(Akina @  28.3.2011,  16:01 Найти цитируемый пост)
Используй binary collation 


Автор: GrafF812 29.3.2011, 09:35
skyboy, Спасибо. мне подошло:
Код

SELECT DISTINCT convert( name, BINARY )
FROM person
ORDER BY name


Цитата(skyboy @  28.3.2011,  18:16 Найти цитируемый пост)
обственно, это иллюстрация к уже сказанному Akina:

В этом случае придется менять структуру самой таблицы, а это не желательно.

Автор: skyboy 29.3.2011, 14:34
Цитата(GrafF812 @  29.3.2011,  08:35 Найти цитируемый пост)
В этом случае придется менять структуру самой таблицы

не понял.
вот ты говоришь "подошло".
Цитата(GrafF812 @  29.3.2011,  08:35 Найти цитируемый пост)
convert( name, BINARY )

это даже круче, чем 
Цитата(Akina @  28.3.2011,  16:01 Найти цитируемый пост)
Используй binary collation 

это charset меняешь.

Автор: comcon1 30.3.2011, 00:54
я вот почему-то подумал, а так не будет быстрее?
Код

SELECT name FROM table GROUP BY hash_function(name) ORDER BY name

Автор: Akina 30.3.2011, 07:23
Цитата(comcon1 @  30.3.2011,  01:54 Найти цитируемый пост)
а так не будет быстрее?

Конечно нет. Функция в выражении группировки - filesearch без вариантов.

Автор: Gwire 13.4.2011, 23:47
А можно еще так
Код

SELECT DISTINCT Lower( name ) FROM person ORDER BY name
/* или */
SELECT name FROM person GROUP BY Lower( name ) ORDER BY name


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)