2012-05-11 2 views
0

У меня есть база данных, которая содержит таблицу присваивания. Таблица выглядит так:Проблема с прописными и строчными буквами с использованием MySql Springdata и Hibernate

ID | CHARACTER_ASS | TYPE_ASS 

Внутри символьного столбца хранятся буквы и цифры. То есть. «A», «a», «Aa». «AA», 1 и т.д. ... Теперь, когда я выполнить следующий запрос в моей консоли запроса:

select * from assignment a where a.CHARACTER_ASS = 'A' 

Она возвращает строчную запись в моей базе данных и заглавной записи, а также. Теперь я искал ответ на этот вопрос, и кто-то сказал мне, что это может быть, потому что я работаю на ОС Windows. Я просмотрел это и мог только обнаружить, что может возникнуть проблема с именами имен имен с/без строчной буквы (?).

Одна из других проблем заключается в том, что я использую данные весны. В весенних данных я не имею прямого контроля над запросом, поэтому мне интересно, существует ли конкретное исправление для данных весны.

Я хотел бы услышать ваши ответы относительно этого вопроса :)

Заранее спасибо

EDIT

My SHOW CREATE TABLE задание:

CREATE TABLE `assignment` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `CHARACTER_ASS` varchar(45) NOT NULL, 
    `TYPE_ASS` int(11) NOT NULL, 
    PRIMARY KEY (`ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 

edit2

Я изменил таблицу присваивания Collation на: latin1_general_cs, и я попытался выполнить запрос вручную в редакторе запросов MySql, но я все равно получаю A и обратно. Затем я попытался настроить сортировку таблицы так же, как и в таблице. Я делаю что-то неправильно или должна работать настройка?

EDIT3

Хорошо я просто fixxed его. Вместо использования latin1_general_cs я использовал utf8_bin. Кажется, что utf8 не имеет чувствительной к регистру сортировки :) Спасибо JB Nizet за то, что указали мне в правильном направлении!

+0

Вот первый результат я получаю, когда googling для «mysql case-sensitive»: http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html –

+0

Я также нашел это, но это не поможет мне вызвать springdata. У меня нет подсказки для использования COLLATE с springdata. –

+0

Не используйте сортировку. Настройте таблицу для использования двоичной сортировки. –

ответ

1

Укажите регистрозависимые сортировки при создании таблицы:

CREATE TABLE assignment (
    ID int(11) NOT NULL AUTO_INCREMENT, 
    CHARACTER_ASS varchar(45) NOT NULL, 
    TYPE_ASS int(11) NOT NULL, 
    PRIMARY KEY (ID) 
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8, COLLATE=latin1_general_cs 

Обратите внимание, что параметры сортировка по умолчанию также может быть установлена ​​на глобальном уровне, на уровне базы данных: http://dev.mysql.com/doc/refman/5.0/en/charset-database.html

+0

Итак, ответ на все это - использовать latin1_general_cs?Могу ли я использовать это как значение по умолчанию для всех моих проектов? или есть недостаток в использовании этого –

+0

Когда я запускаю код, я получаю следующую ошибку: Код ошибки: 1253. COLLATION 'latin1_general_cs' недействителен для CHARACTER SET 'utf8' –

+0

Выберите подходящую вам сортировку. Но если вы хотите, чтобы сравнение строк было чувствительным к регистру, сопоставление должно быть чувствительным к регистру или двоичным. См. Http://dev.mysql.com/doc/refman/5.0/en/charset-mysql.html и не стесняйтесь нажимать на ссылки в правой части страницы. В заявлении show collation отображаются все сопоставления и их набор символов –

0

Что такое набор символов и сортировка для этого поля?

Вы можете выполнить команду SHOW CREATE TABLE tablename;

+0

Я обновил свой вопрос –

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