MySQL недопустимая смесь сопоставлений со всеми utf8 дБ / таблицами / столбцами
Я не понимаю Я никогда не получал это, но теперь я действительно потерян. Моя база данных - utf8, мои таблицы - utf8, а мои столбцы - utf8. Некоторые из данных являются latin1/iso-8859-1, поэтому они просто отображаются неправильно. (Мне сейчас все равно.) Раньше все были латинскими, а теперь 50/50, что еще хуже.
Когда я не говорю напрямую, чтобы соединение использовало все utf8, все запросы работают, и все данные отображаются правильно (даже если они хранятся неправильно). Это связано с тем, что память неправильная (латиница 1 в utf8), а соединение "неправильное" (я думаю, по умолчанию латиница 1), так что все отменяется. Символ в порядке и без ошибок. Но очевидно, что это недопустимо, потому что база данных содержит дерьмо.
Итак, я хочу все utf8, поэтому я говорю MySQL конкретно (первый запрос каждый раз):
SET NAMES 'utf8' COLLATE 'utf8_general_ci'
И тогда каким-то образом следующий запрос не выполняется:
SELECT
r.id,
r.slots,
r.start_time AS StartA,
ADDTIME(r.start_time, SEC_TO_TIME(60*r.slots*s.slotsize)) AS EindA,
'14:30:00' AS StartB,
'15:30:00' AS EindB
FROM
club_sports s, resources c, reservations r
WHERE
r.resource_id = c.id AND
c.club_sport_id = s.id AND
r.not_cancelled = '1' AND
r.resource_id = 25 AND
r.date = '2013-01-18'
HAVING
(
(StartA >= StartB AND StartA < EindB) OR
(EindA >= StartB AND EindA < StartB) OR
(StartB >= StartA AND StartB < EindA) OR
(EindB >= StartA AND EindB < StartA)
)
LIMIT 1
со следующей ошибкой:
Недопустимое сочетание параметров сортировки (utf8_general_ci,COERCIBLE) и (latin1_swedish_ci,NUMERIC) для операции '<'
Я не понимаю! Где это взять latin1_swedish_ci,NUMERIC
?? Все части в HAVING не являются числовыми, и они все одинаковые utf8, верно? Исходные таблицы и столбцы - utf8!
Я знаю, что запрос не идеален, но сейчас это не имеет значения. Я должен иметь возможность создавать поддельные / TMP столбцы с ''
и сравнивать их в НАЛИЧИИ, верно?
Мне действительно нужно, чтобы моя база данных была utf8, потому что мне действительно нужны мои данные, чтобы быть utf8, потому что json_encode действительно нуждается в utf8, поэтому мне действительно нужно соединение, чтобы быть utf8. Помогите!
1 ответ
Предложение HAVING предназначено для агрегированных значений (вспомним предложение WHERE для элементов GROUP BY).
Вам необходимо повторить вычисления (например, функцию ADDTIME) в предложении WHERE, потому что вы не можете использовать псевдоним.