Создать таблицу с синтаксической ошибкой раздела: 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')
)