Подтвердить что ты не робот

COLLATION 'utf8_general_ci' недействителен для CHARACTER SET 'latin1'

Я пытаюсь исправить проблему кодировки символов - ранее у нас был установлен порядок сортировки для этого столбца utf8_general_ci, который вызывал проблемы, потому что он нечувствителен к акценту.

Я пытаюсь найти все записи в базе данных, которые могли быть затронуты.

set names utf8;
select * from table1 t1 join table2 t2 on (t1.pid=t2.pid and t1.id != t2.id) collate utf8_general_ci;

Тем не менее, это генерирует ошибку:

ERROR 1253 (42000): COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'latin1'
  1. База данных теперь определяется с помощью DEFAULT CHARACTER SET utf8
  2. Таблица определена с CHARSET=utf8
  3. Столбец "pid" определяется с помощью: CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
  4. Версия сервера - версия сервера: 5.5.37-MariaDB-0ubuntu0.14.04.1 (Ubuntu)

Вопрос: Почему я получаю сообщение об ошибке latin1, когда latin1, кажется, нигде не присутствует в определении таблицы/схемы?

MariaDB [(none)]> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

MariaDB [(none)]> SHOW VARIABLES LIKE '%collation%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
4b9b3361

Ответ 1

Сначала выполните этот запрос

SHOW VARIABLES LIKE '%char%';

У вас есть character_set_server='latin1'

Если это так, зайдите в свой файл конфигурации my.cnf и добавьте или раскомментируйте следующие строки:

character-set-server = utf8
collation-server = utf8_general_ci

Перезагрузите сервер. Да, поздно вечером, просто столкнулся с той же проблемой.

Ответ 2

Та же ошибка возникает в MariaDB (10.1.36-MariaDB) с использованием комбинации скобок и оператора COLLATE. Мой SQL был другим, ошибка была той же, у меня было:

SELECT *
FROM table1
WHERE (field = 'STRING') COLLATE utf8_bin;

Пропуск скобок решал это для меня.

SELECT *
FROM table1
WHERE field = 'STRING' COLLATE utf8_bin;