Создать таблицу с синтаксической ошибкой раздела: MySQL

У меня ошибка при создании MySQL стол с разметкой.

    CREATE TABLE employees (
    context VARCHAR(25),
    id INT
)
PARTITION BY LIST(context) (
    PARTITION pNorth VALUES IN('ads','asd')
);

Это дает:

ОШИБКА 1064 (42000): значение VALUES должно быть того же типа, что и функция разделения рядом с ''asd'))' в строке 6

Пожалуйста, помогите мне.

4 ответа

Я думаю, что проблема здесь в том, что вы пытаетесь разделить на VARCHAR столбец типа данных. Для LIST раздел вы должны ссылаться на INTEGER введите столбец. Из документов:

Разделение списков в MySQL во многом похоже на разделение диапазонов. Как и при разделении с помощью RANGE, каждый раздел должен быть явно определен. Основное различие между двумя типами разделения заключается в том, что при разделении списка каждый раздел определяется и выбирается на основе принадлежности значения столбца в одном из набора списков значений, а не в одном из набора смежных диапазонов. ценности. Это делается с помощью PARTITION BY LIST(expr), где expr является значением столбца или выражением, основанным на значении столбца и возвращающим целочисленное значение, а затем определяя каждый раздел с помощью VALUES IN (value_list), где value_list является разделенный запятыми список целых чисел.

Вводящая в заблуждение ошибка, хотя точно!

РЕДАКТИРОВАТЬ

Что вы должны взглянуть на это разделение по LIST COLUMNS в отличие от разделения через LIST, Следовательно:

CREATE TABLE employees (
    context VARCHAR(25),
    id INT
)
PARTITION BY LIST COLUMNS(context) (
    PARTITION pNorth VALUES IN('ads','asd')
);

Как отметил @Bill Karwin: "В MySQL 5.1 разделение LIST можно выполнять только с целыми числами. В MySQL 5.5 они добавили возможность выполнять LIST COLUMNS с некоторыми другими типами данных".

Вы, вероятно, обнаружите, что нет никакого преимущества в производительности BY LIST над подходящим ИНДЕКСОМ.

Подробнее Обсуждение раздела.

В документации по разделам LIST не упоминается COLUMNS в качестве ключевого слова.
Попробуйте удалить COLUMNS из вашего запроса:

CREATE TABLE ...
)
PARTITION BY LIST (context) (
  PARTITION pNorth VALUES IN('ads','asd')
)
Другие вопросы по тегам