MySQL Workbench: Erreur dans la requête(1064): erreur de syntaxe près de "VISIBLE" à la ligne 1




mysql-workbench (2)

Le problème ici est la différence de syntaxe entre les différentes versions de serveur MySQL. Il semble que MySQL Workbench 8.0.12 génère automatiquement l’instruction CREATE UNIQUE INDEX pour le serveur MySQL version 8.0 .

Dans les documents MySQL Server 8.0 , la syntaxe de CREATE INDEX est la suivante:

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}

Cependant, cette option de {VISIBLE | INVISIBLE} {VISIBLE | INVISIBLE} n'est pas disponible dans MySQL Server 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 vous ne recherchez pas la mise à niveau vers la dernière version de MySQL; vous pouvez désactiver cette fonction de génération automatique avec l'index VISIBLE / INVISIBLE :

Dans MySQL Workbench:

Aller à:

Édition> Préférences> Modélisation> MySQL.

Définissez ensuite la "Version par défaut de MySQL cible" sur 5.7.

Vérifiez la capture d'écran ci-dessous:

Des idées pourquoi VISIBLE ci-dessous est à l'origine d'un problème?

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;

Les erreurs:

CREATE UNIQUE INDEX name_UNIQUE ON ( code ASC) VISIBLE Erreur dans la requête (1064): erreur de syntaxe à proximité de 'VISIBLE' à la ligne 1

CREATE UNIQUE INDEX uuid_UNIQUE ON ( uuid ASC) VISIBLE Erreur dans la requête (1064): erreur de syntaxe près de 'VISIBLE' à la ligne 1

Aucune erreur si je supprime VISIBLE mais MySQL Workbench 8.0.12 le génère automatiquement. Comment puis-je empêcher MySQL Workbench de le faire?

Mon info MySQL dans mon Ubuntu 18.04:

Version de MySQL: 5.7.23-0ubuntu0.18.04.1 via l'extension PHP MySQLi


Version alternative à 5.7 ou 6.3. J'ai utilisé 6.3. Sur le modèle> Options de modèle ..> MySql> 6.3





mysql-workbench