error en el particionamiento mysql

Necesito crear la tabla en el siguiente formato. Pero está devolviendo el error en el área de partición que es Error Code: 1659. Field 'fldassigndate' is of a not allowed type for this type of partitioning. ¿Cómo resolver este error y hacer particiones?

CREATE TABLE tblattendancesetup (
  fldattendanceid int(11) NOT NULL AUTO_INCREMENT,
  flddept varchar(100) DEFAULT NULL,
  fldemployee varchar(100) DEFAULT NULL,
  fldintime varchar(20) DEFAULT NULL,
  fldouttime varchar(20) DEFAULT NULL,
  fldlateafter varchar(20) DEFAULT NULL,
  fldearlybefore varchar(20) DEFAULT NULL,
  fldweekoff varchar(20) DEFAULT NULL,
  fldshiftname varchar(20) DEFAULT NULL,
  fldassigndate varchar(20) DEFAULT NULL,
  fldfromdate varchar(20) DEFAULT NULL,
  fldtodate varchar(20) DEFAULT NULL,
  fldrefid varchar(20) DEFAULT NULL,
  UNIQUE KEY fldattendanceid (fldattendanceid),
  KEY in_attendancesetup (fldemployee,fldintime,fldouttime,fldlateafter,fldearlybefore,fldfromdate,fldtodate,fldattendanceid),
  KEY i_emp_tmp (fldemployee),
  KEY i_emp_attendance (fldemployee)
)
 PARTITION BY RANGE (fldassigndate)
(PARTITION p_Apr VALUES LESS THAN (TO_DAYS('2012-05-01')),
 PARTITION p_May VALUES LESS THAN (TO_DAYS('2012-06-01')),
 PARTITION p_Nov VALUES LESS THAN MAXVALUE );

preguntado el 24 de agosto de 12 a las 06:08

¿Por qué todas sus columnas de fecha son VARCHAR (20)? que seria MAXVALUE significa a un campo que puede almacenar texto arbitrario? -

¿Investigaste esto? La respuesta es fácil de encontrar con una simple búsqueda. -

2 Respuestas

Del manual de MySQL (Sección 18):

Tipo de datos de la clave de partición. Una clave de partición debe ser una columna de enteros o una expresión que se resuelva en un entero.

No se pueden usar fechas ni varchars para particionar

Respondido 24 ago 12, 06:08

Me cambiaron el tipo de datos a date. Agregue esa columna a la clave única y la función to_days. asi que. Está funcionando bien. Pero. Tengo dudas de cómo funcionará la partición si el tipo de datos de esa columna será varchar. - Dhileepan

Aunque esta pregunta es muy antigua, pensé que ayudaría a quienes buscan, como lo hice en un momento.

OP primero debe establecer sus estructuras de columna correctamente usando una estructura correcta para un campo de fecha, como fecha y hora.

Una vez hecho esto, no he intentado establecer mis claves de esa manera, pero descubrí que necesitaba usar una clave principal compuesta si quería mantener la misma estructura de mi tabla. En este caso, sería

PRIMARY KEY(`fldattendanceid`, `fldassigndate`)

Luego, falta TO_DAYS especificado en la PARTICIÓN POR RANGO. Por último, no estoy 100 por ciento seguro, pero no creo que puedas particionar en un campo nulo. Incluso si puedes, sería una práctica horrible hacerlo.

    CREATE TABLE tblattendancesetup (
    fldattendanceid INT(11) NOT NULL AUTO_INCREMENT,
    flddept VARCHAR(100) DEFAULT NULL,
    fldemployee VARCHAR(100) DEFAULT NULL,
    fldintime DATETIME DEFAULT NULL,
    fldouttime DATETIME DEFAULT NULL,
    fldlateafter DATETIME DEFAULT NULL,
    fldearlybefore DATETIME DEFAULT NULL,
    fldweekoff VARCHAR(20) DEFAULT NULL,
    fldshiftname VARCHAR(20) DEFAULT NULL,
    fldassigndate DATETIME NOT NULL,
    fldfromdate DATETIME DEFAULT NULL,
    fldtodate DATETIME DEFAULT NULL,
    fldrefid VARCHAR(20) DEFAULT NULL,
    PRIMARY KEY(`fldattendanceid`, `fldassigndate`),
    KEY in_attendancesetup     (fldemployee,fldintime,fldouttime,fldlateafter,fldearlybefore,fldfromdate,fldtodate,fldattendanceid),
  KEY i_emp_tmp (fldemployee),
  KEY i_emp_attendance (fldemployee)
)
 PARTITION BY RANGE ( TO_DAYS(fldassigndate))
(PARTITION p_Apr VALUES LESS THAN (TO_DAYS('2012-05-01')),
 PARTITION p_May VALUES LESS THAN (TO_DAYS('2012-06-01')),
 PARTITION p_Nov VALUES LESS THAN MAXVALUE );

¡Espero que esto ayude a alguien!

Respondido 17 Jul 15, 22:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.