MySQL Workbench: Error en la consulta(1064): Error de sintaxis cerca de 'VISIBLE' en la línea 1




mysql-workbench (2)

El problema aquí es la diferencia en la sintaxis de las diferentes versiones del servidor MySQL. Parece que MySQL Workbench 8.0.12 genera automáticamente la CREATE UNIQUE INDEX para el servidor MySQL versión 8.0 .

Desde MySQL Server 8.0 Docs , la sintaxis de CREATE INDEX es:

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (key_part,...)
    [index_option]
    [algorithm_option | lock_option] ...

key_part: {col_name [(length)] | (expr)} [ASC | DESC]

index_option:
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'
  | {VISIBLE | INVISIBLE}  /* Notice the option of VISIBLE / INVISIBLE */

index_type:
  USING {BTREE | HASH}

Sin embargo, esta opción de {VISIBLE | INVISIBLE} {VISIBLE | INVISIBLE} no está disponible en el servidor MySQL 5.7 . De Docs :

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (key_part,...)
    [index_option]
    [algorithm_option | lock_option] ...

key_part:
    col_name [(length)] [ASC | DESC]

index_option:
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'   /* No option of VISIBLE / INVISIBLE */

index_type:
    USING {BTREE | HASH}

Si no desea actualizar a la última versión de MySQL; puede deshabilitar esta función de generación automática con el índice VISIBLE / INVISIBLE :

En MySQL Workbench:

Ir:

Edición> Preferencias> Modelado> MySQL.

Luego, configure la "Versión de MySQL de destino predeterminada" a 5.7

Compruebe la captura de pantalla a continuación:

¿Alguna idea de por qué VISIBLE continuación está causando un problema?

CREATE TABLE IF NOT EXISTS `setting` (
  `uuid` INT(10) NOT NULL,
  `type` VARCHAR(255) NOT NULL,
  `code` VARCHAR(255) NOT NULL COMMENT 'An unique name.',
  `value` MEDIUMTEXT NULL DEFAULT NULL,
  `comment` LONGTEXT NULL DEFAULT NULL,
  `created_on` INT UNSIGNED NOT NULL,
  `updated_on` INT UNSIGNED NOT NULL,
  PRIMARY KEY (`uuid`))
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8;

CREATE UNIQUE INDEX `name_UNIQUE` ON `setting` (`code` ASC) VISIBLE;

CREATE UNIQUE INDEX `uuid_UNIQUE` ON `setting` (`uuid` ASC) VISIBLE;

Errores:

CREAR UN ÍNDICE ÚNICO name_UNIQUE ON setting ( code ASC) Error VISIBLE en la consulta (1064): Error de sintaxis cerca de 'VISIBLE' en la línea 1

CREAR UN ÍNDICE ÚNICO uuid_UNIQUE ON setting ( uuid ASC) Error VISIBLE en la consulta (1064): Error de sintaxis cerca de 'VISIBLE' en la línea 1

No hay error si elimino VISIBLE pero MySQL Workbench 8.0.12 lo genera automáticamente. ¿Cómo puedo evitar que MySQL Workbench haga eso?

Mi información de MySQL en mi Ubuntu 18.04:

Versión de MySQL: 5.7.23-0ubuntu0.18.04.1 a través de la extensión PHP MySQLi


Versión alternativa a 5.7 o 6.3. Utilicé 6.3. En Modelo> Opciones de modelo ..> MySql> 6.3





mysql-workbench