-- Separa el Cuaderno de Ocurrencias del Libro/Cuaderno de Incidencias.
-- La migracion es aditiva: conserva los registros existentes y no redefine
-- vw_tut_incidencia_resumen, que continuara siendo compatible.

SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS tut_ocurrencia_categoria (
    id_categoria_ocurrencia SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    codigo VARCHAR(50) NOT NULL,
    nombre VARCHAR(120) NOT NULL,
    descripcion VARCHAR(500) NOT NULL,
    orden SMALLINT UNSIGNED NOT NULL DEFAULT 1,
    activo TINYINT(1) NOT NULL DEFAULT 1,
    creado_en TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    actualizado_en TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id_categoria_ocurrencia),
    UNIQUE KEY uq_tut_ocurrencia_categoria_codigo (codigo),
    KEY idx_tut_ocurrencia_categoria_orden (activo, orden)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO tut_ocurrencia_categoria (codigo, nombre, descripcion, orden, activo) VALUES
('CONVIVENCIA_CONDUCTA', 'Convivencia / conducta', 'Situaciones cotidianas que requieren orientación o registro y que no constituyen por sí mismas violencia escolar.', 1, 1),
('SALUD_BIENESTAR', 'Salud y bienestar', 'Malestar, accidente leve, atención primaria, retiro por salud u otra situación que requiera constancia.', 2, 1),
('ASISTENCIA_PERMANENCIA', 'Asistencia / permanencia', 'Llegadas tardías, retiros, ausencia inusual o incidencias relacionadas con permanencia en el servicio.', 3, 1),
('INFRAESTRUCTURA_SERVICIOS', 'Infraestructura / servicios', 'Daños, fallas, riesgos, corte de servicios, mobiliario o ambientes que requieran atención.', 4, 1),
('SEGURIDAD', 'Seguridad', 'Ingreso de personas, objetos encontrados, pérdida de bienes, situaciones de riesgo o medidas preventivas.', 5, 1),
('ACADEMICO_PEDAGOGICO', 'Académico / pedagógico', 'Hechos excepcionales que afecten el desarrollo de clases, evaluaciones, actividades o materiales.', 6, 1),
('ADMINISTRATIVO_INSTITUCIONAL', 'Administrativo / institucional', 'Comunicaciones, entregas, visitas, coordinaciones o hechos relevantes del funcionamiento institucional.', 7, 1),
('OTRO', 'Otro', 'Cualquier hecho relevante no comprendido en las categorías anteriores, describiéndolo con precisión.', 8, 1)
ON DUPLICATE KEY UPDATE
    nombre = VALUES(nombre),
    descripcion = VALUES(descripcion),
    orden = VALUES(orden),
    activo = VALUES(activo);

CREATE TABLE IF NOT EXISTS tut_ocurrencia (
    id_ocurrencia BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    id_anio_lectivo SMALLINT UNSIGNED NOT NULL,
    numero_ocurrencia INT UNSIGNED NOT NULL,
    fecha DATE NOT NULL,
    hora TIME NULL,
    lugar VARCHAR(180) NULL,
    categoria_otro VARCHAR(180) NULL,
    id_nivel CHAR(3) NULL,
    id_grado TINYINT UNSIGNED NULL,
    id_seccion TINYINT UNSIGNED NULL,
    persona_que_registra_nombre VARCHAR(220) NOT NULL,
    persona_que_registra_cargo VARCHAR(160) NULL,
    persona_que_informa_nombre VARCHAR(220) NULL,
    persona_que_informa_vinculo VARCHAR(160) NULL,
    descripcion_objetiva TEXT NOT NULL,
    personas_relacionadas TEXT NULL,
    testigos_fuentes TEXT NULL,
    acciones_inmediatas TEXT NULL,
    comunicacion_realizada TINYINT(1) NOT NULL DEFAULT 0,
    comunicacion_detalle TEXT NULL,
    derivacion_documento_tipo VARCHAR(60) NULL,
    derivacion_documento_detalle TEXT NULL,
    responsable_derivacion_nombre VARCHAR(220) NULL,
    seguimiento_requerido TINYINT(1) NOT NULL DEFAULT 0,
    responsable_seguimiento VARCHAR(220) NULL,
    fecha_prevista_seguimiento DATE NULL,
    persona_que_registra_conforme TINYINT(1) NOT NULL DEFAULT 0,
    persona_que_registra_conformidad_en DATETIME NULL,
    responsable_derivacion_conforme TINYINT(1) NOT NULL DEFAULT 0,
    responsable_derivacion_conformidad_en DATETIME NULL,
    visto_bueno_direccion_nombre VARCHAR(220) NULL,
    visto_bueno_direccion TINYINT(1) NOT NULL DEFAULT 0,
    visto_bueno_direccion_en DATETIME NULL,
    estado ENUM('REGISTRADO','EN_ATENCION','DERIVADO','EN_SEGUIMIENTO','CERRADO') NOT NULL DEFAULT 'REGISTRADO',
    id_incidencia_derivada INT UNSIGNED NULL,
    id_usuario_creador INT UNSIGNED NULL,
    id_usuario_actualizador INT UNSIGNED NULL,
    creado_en TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    actualizado_en TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id_ocurrencia),
    UNIQUE KEY uq_tut_ocurrencia_correlativo (id_anio_lectivo, numero_ocurrencia),
    UNIQUE KEY uq_tut_ocurrencia_incidencia (id_incidencia_derivada),
    KEY idx_tut_ocurrencia_fecha (id_anio_lectivo, fecha),
    KEY idx_tut_ocurrencia_estado (id_anio_lectivo, estado, fecha),
    KEY idx_tut_ocurrencia_aula (id_nivel, id_grado, id_seccion),
    KEY idx_tut_ocurrencia_creador (id_usuario_creador),
    KEY idx_tut_ocurrencia_actualizador (id_usuario_actualizador),
    CONSTRAINT fk_tut_ocurrencia_anio FOREIGN KEY (id_anio_lectivo)
        REFERENCES anio_lectivo (id_anio_lectivo) ON UPDATE CASCADE ON DELETE RESTRICT,
    CONSTRAINT fk_tut_ocurrencia_nivel FOREIGN KEY (id_nivel)
        REFERENCES nivel_educativo (id_nivel) ON UPDATE CASCADE ON DELETE SET NULL,
    CONSTRAINT fk_tut_ocurrencia_grado FOREIGN KEY (id_grado)
        REFERENCES grado (id_grado) ON UPDATE CASCADE ON DELETE SET NULL,
    CONSTRAINT fk_tut_ocurrencia_seccion FOREIGN KEY (id_seccion)
        REFERENCES seccion (id_seccion) ON UPDATE CASCADE ON DELETE SET NULL,
    CONSTRAINT fk_tut_ocurrencia_incidencia FOREIGN KEY (id_incidencia_derivada)
        REFERENCES tut_incidencia (id_incidencia) ON UPDATE CASCADE ON DELETE SET NULL,
    CONSTRAINT fk_tut_ocurrencia_creador FOREIGN KEY (id_usuario_creador)
        REFERENCES usuario_sistema (id_usuario) ON UPDATE CASCADE ON DELETE SET NULL,
    CONSTRAINT fk_tut_ocurrencia_actualizador FOREIGN KEY (id_usuario_actualizador)
        REFERENCES usuario_sistema (id_usuario) ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS tut_ocurrencia_categoria_rel (
    id_ocurrencia BIGINT UNSIGNED NOT NULL,
    id_categoria_ocurrencia SMALLINT UNSIGNED NOT NULL,
    creado_en TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id_ocurrencia, id_categoria_ocurrencia),
    KEY idx_tut_ocurrencia_categoria_rel_categoria (id_categoria_ocurrencia, id_ocurrencia),
    CONSTRAINT fk_tut_ocurrencia_categoria_rel_ocurrencia FOREIGN KEY (id_ocurrencia)
        REFERENCES tut_ocurrencia (id_ocurrencia) ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT fk_tut_ocurrencia_categoria_rel_categoria FOREIGN KEY (id_categoria_ocurrencia)
        REFERENCES tut_ocurrencia_categoria (id_categoria_ocurrencia) ON UPDATE CASCADE ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS tut_ocurrencia_comunicacion (
    id_ocurrencia_comunicacion BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    id_ocurrencia BIGINT UNSIGNED NOT NULL,
    fecha_hora DATETIME NOT NULL,
    tipo_destinatario ENUM('DIRECCION','FAMILIA','DOCENTE_TUTOR','SALUD','AUTORIDAD_ENTIDAD','OTRA') NOT NULL,
    destinatario_entidad VARCHAR(220) NULL,
    medio VARCHAR(80) NULL,
    motivo_asunto VARCHAR(500) NULL,
    detalle TEXT NULL,
    responsable_nombre VARCHAR(220) NULL,
    constancia_anexo VARCHAR(500) NULL,
    id_usuario_creador INT UNSIGNED NULL,
    creado_en TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id_ocurrencia_comunicacion),
    KEY idx_tut_ocurrencia_comunicacion_fecha (id_ocurrencia, fecha_hora),
    KEY idx_tut_ocurrencia_comunicacion_usuario (id_usuario_creador),
    CONSTRAINT fk_tut_ocurrencia_comunicacion FOREIGN KEY (id_ocurrencia)
        REFERENCES tut_ocurrencia (id_ocurrencia) ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT fk_tut_ocurrencia_comunicacion_usuario FOREIGN KEY (id_usuario_creador)
        REFERENCES usuario_sistema (id_usuario) ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS tut_ocurrencia_seguimiento (
    id_ocurrencia_seguimiento BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    id_ocurrencia BIGINT UNSIGNED NOT NULL,
    fecha_hora DATETIME NOT NULL,
    accion_seguimiento TEXT NOT NULL,
    responsable_nombre VARCHAR(220) NOT NULL,
    resultado_acuerdo TEXT NULL,
    proxima_accion TEXT NULL,
    fecha_proxima_accion DATE NULL,
    estado_resultante ENUM('EN_ATENCION','DERIVADO','EN_SEGUIMIENTO','CERRADO') NULL,
    firma_referencia VARCHAR(300) NULL,
    id_usuario_creador INT UNSIGNED NULL,
    creado_en TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id_ocurrencia_seguimiento),
    KEY idx_tut_ocurrencia_seguimiento_fecha (id_ocurrencia, fecha_hora),
    KEY idx_tut_ocurrencia_seguimiento_proxima (fecha_proxima_accion),
    KEY idx_tut_ocurrencia_seguimiento_usuario (id_usuario_creador),
    CONSTRAINT fk_tut_ocurrencia_seguimiento FOREIGN KEY (id_ocurrencia)
        REFERENCES tut_ocurrencia (id_ocurrencia) ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT fk_tut_ocurrencia_seguimiento_usuario FOREIGN KEY (id_usuario_creador)
        REFERENCES usuario_sistema (id_usuario) ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS tut_ocurrencia_anexo (
    id_ocurrencia_anexo BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    id_ocurrencia BIGINT UNSIGNED NOT NULL,
    numero_orden SMALLINT UNSIGNED NOT NULL DEFAULT 1,
    tipo_documento VARCHAR(80) NOT NULL,
    descripcion_asunto VARCHAR(500) NULL,
    fecha_documento DATE NULL,
    folios SMALLINT UNSIGNED NULL,
    ubicacion_codigo VARCHAR(300) NULL,
    nombre_original VARCHAR(255) NULL,
    ruta_archivo VARCHAR(700) NULL,
    mime_type VARCHAR(120) NULL,
    tamanio_bytes BIGINT UNSIGNED NULL,
    sha256 CHAR(64) NULL,
    observacion VARCHAR(700) NULL,
    reservado TINYINT(1) NOT NULL DEFAULT 1,
    id_usuario_creador INT UNSIGNED NULL,
    creado_en TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id_ocurrencia_anexo),
    UNIQUE KEY uq_tut_ocurrencia_anexo_orden (id_ocurrencia, numero_orden),
    KEY idx_tut_ocurrencia_anexo_usuario (id_usuario_creador),
    CONSTRAINT fk_tut_ocurrencia_anexo FOREIGN KEY (id_ocurrencia)
        REFERENCES tut_ocurrencia (id_ocurrencia) ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT fk_tut_ocurrencia_anexo_usuario FOREIGN KEY (id_usuario_creador)
        REFERENCES usuario_sistema (id_usuario) ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE tut_incidencia
    ADD COLUMN IF NOT EXISTS folio VARCHAR(30) NULL AFTER numero_ficha,
    ADD COLUMN IF NOT EXISTS formato_registro ENUM('A','B') NOT NULL DEFAULT 'A' AFTER folio,
    ADD COLUMN IF NOT EXISTS fecha_conocimiento DATE NULL AFTER formato_registro,
    ADD COLUMN IF NOT EXISTS hora_conocimiento TIME NULL AFTER fecha_conocimiento,
    ADD COLUMN IF NOT EXISTS fecha_hecho DATE NULL AFTER hora_conocimiento,
    ADD COLUMN IF NOT EXISTS hora_hecho TIME NULL AFTER fecha_hecho,
    ADD COLUMN IF NOT EXISTS tipo_reporte ENUM('ENTRE_ESTUDIANTES','PERSONAL_IE_A_ESTUDIANTE','OTRO_PROTOCOLO') NULL AFTER hora_hecho,
    ADD COLUMN IF NOT EXISTS numero_siseve VARCHAR(80) NULL AFTER tipo_reporte,
    ADD COLUMN IF NOT EXISTS informante_nombre VARCHAR(220) NULL AFTER numero_siseve,
    ADD COLUMN IF NOT EXISTS informante_vinculo_cargo VARCHAR(160) NULL AFTER informante_nombre,
    ADD COLUMN IF NOT EXISTS informante_dni VARCHAR(20) NULL AFTER informante_vinculo_cargo,
    ADD COLUMN IF NOT EXISTS informante_telefono_correo VARCHAR(220) NULL AFTER informante_dni,
    ADD COLUMN IF NOT EXISTS informante_domicilio_otro VARCHAR(300) NULL AFTER informante_telefono_correo,
    ADD COLUMN IF NOT EXISTS afectado_iniciales VARCHAR(30) NULL AFTER informante_domicilio_otro,
    ADD COLUMN IF NOT EXISTS afectado_edad TINYINT UNSIGNED NULL AFTER afectado_iniciales,
    ADD COLUMN IF NOT EXISTS afectado_grado_seccion_turno VARCHAR(120) NULL AFTER afectado_edad,
    ADD COLUMN IF NOT EXISTS afectado_discapacidad TINYINT(1) NULL AFTER afectado_grado_seccion_turno,
    ADD COLUMN IF NOT EXISTS afectado_discapacidad_detalle VARCHAR(500) NULL AFTER afectado_discapacidad,
    ADD COLUMN IF NOT EXISTS afectado_condicion_relevante TEXT NULL AFTER afectado_discapacidad_detalle,
    ADD COLUMN IF NOT EXISTS presunto_agresor_personal_nombre VARCHAR(220) NULL AFTER afectado_condicion_relevante,
    ADD COLUMN IF NOT EXISTS presunto_agresor_personal_cargo_funcion VARCHAR(180) NULL AFTER presunto_agresor_personal_nombre,
    ADD COLUMN IF NOT EXISTS presunto_agresor_relacion_afectado VARCHAR(180) NULL AFTER presunto_agresor_personal_cargo_funcion,
    ADD COLUMN IF NOT EXISTS acciones_inmediatas_proteccion TEXT NULL AFTER presunto_agresor_relacion_afectado,
    ADD COLUMN IF NOT EXISTS comunicacion_familia TEXT NULL AFTER acciones_inmediatas_proteccion,
    ADD COLUMN IF NOT EXISTS comunicacion_instancia_competente TEXT NULL AFTER comunicacion_familia,
    ADD COLUMN IF NOT EXISTS medidas_institucionales TEXT NULL AFTER comunicacion_instancia_competente,
    ADD COLUMN IF NOT EXISTS responsable_actuacion VARCHAR(220) NULL AFTER medidas_institucionales,
    ADD COLUMN IF NOT EXISTS fecha_proximo_seguimiento DATE NULL AFTER responsable_actuacion,
    ADD COLUMN IF NOT EXISTS nivel_reserva ENUM('RESERVADO','ESTRICTO') NOT NULL DEFAULT 'RESERVADO' AFTER fecha_proximo_seguimiento;

UPDATE tut_incidencia
SET fecha_conocimiento = COALESCE(fecha_conocimiento, fecha),
    hora_conocimiento = COALESCE(hora_conocimiento, hora),
    informante_nombre = COALESCE(NULLIF(informante_nombre, ''), reportante_nombre)
WHERE fecha_conocimiento IS NULL
   OR (hora_conocimiento IS NULL AND hora IS NOT NULL)
   OR (informante_nombre IS NULL AND reportante_nombre IS NOT NULL);

ALTER TABLE tut_incidencia_estudiante
    MODIFY COLUMN rol ENUM('INVOLUCRADO','AFECTADO','PRESUNTO_AGRESOR','TESTIGO') NOT NULL DEFAULT 'INVOLUCRADO';

CREATE TABLE IF NOT EXISTS tut_incidencia_seguimiento (
    id_incidencia_seguimiento BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    id_incidencia INT UNSIGNED NOT NULL,
    fecha_hora DATETIME NOT NULL,
    accion_realizada TEXT NOT NULL,
    responsable_nombre VARCHAR(220) NOT NULL,
    evidencia_documento VARCHAR(500) NULL,
    resultado TEXT NULL,
    proxima_accion TEXT NULL,
    fecha_proxima_accion DATE NULL,
    estado_resultante ENUM('EN_ATENCION','EN_SEGUIMIENTO','CERRADO') NULL,
    observaciones TEXT NULL,
    id_usuario_creador INT UNSIGNED NULL,
    creado_en TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id_incidencia_seguimiento),
    KEY idx_tut_incidencia_seguimiento_fecha (id_incidencia, fecha_hora),
    KEY idx_tut_incidencia_seguimiento_proxima (fecha_proxima_accion),
    KEY idx_tut_incidencia_seguimiento_usuario (id_usuario_creador),
    CONSTRAINT fk_tut_incidencia_seguimiento FOREIGN KEY (id_incidencia)
        REFERENCES tut_incidencia (id_incidencia) ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT fk_tut_incidencia_seguimiento_usuario FOREIGN KEY (id_usuario_creador)
        REFERENCES usuario_sistema (id_usuario) ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS tut_incidencia_comunicacion (
    id_incidencia_comunicacion BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    id_incidencia INT UNSIGNED NOT NULL,
    fecha_hora DATETIME NOT NULL,
    participantes TEXT NULL,
    motivo_reunion_comunicacion VARCHAR(500) NOT NULL,
    informacion_relevante TEXT NULL,
    acuerdos_compromisos TEXT NULL,
    responsables_plazos TEXT NULL,
    observaciones TEXT NULL,
    id_usuario_creador INT UNSIGNED NULL,
    creado_en TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id_incidencia_comunicacion),
    KEY idx_tut_incidencia_comunicacion_fecha (id_incidencia, fecha_hora),
    KEY idx_tut_incidencia_comunicacion_usuario (id_usuario_creador),
    CONSTRAINT fk_tut_incidencia_comunicacion FOREIGN KEY (id_incidencia)
        REFERENCES tut_incidencia (id_incidencia) ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT fk_tut_incidencia_comunicacion_usuario FOREIGN KEY (id_usuario_creador)
        REFERENCES usuario_sistema (id_usuario) ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS tut_incidencia_anexo (
    id_incidencia_anexo BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    id_incidencia INT UNSIGNED NOT NULL,
    numero_orden SMALLINT UNSIGNED NOT NULL DEFAULT 1,
    documento_evidencia VARCHAR(160) NOT NULL,
    fecha_documento DATE NULL,
    fojas SMALLINT UNSIGNED NULL,
    ubicacion_codigo VARCHAR(300) NULL,
    nombre_original VARCHAR(255) NULL,
    ruta_archivo VARCHAR(700) NULL,
    mime_type VARCHAR(120) NULL,
    tamanio_bytes BIGINT UNSIGNED NULL,
    sha256 CHAR(64) NULL,
    observacion VARCHAR(700) NULL,
    nivel_reserva ENUM('RESERVADO','ESTRICTO') NOT NULL DEFAULT 'RESERVADO',
    id_usuario_creador INT UNSIGNED NULL,
    creado_en TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id_incidencia_anexo),
    UNIQUE KEY uq_tut_incidencia_anexo_orden (id_incidencia, numero_orden),
    KEY idx_tut_incidencia_anexo_usuario (id_usuario_creador),
    CONSTRAINT fk_tut_incidencia_anexo FOREIGN KEY (id_incidencia)
        REFERENCES tut_incidencia (id_incidencia) ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT fk_tut_incidencia_anexo_usuario FOREIGN KEY (id_usuario_creador)
        REFERENCES usuario_sistema (id_usuario) ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
