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, потому что вы не можете использовать псевдоним.

Другие вопросы по тегам