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:
CRÉER UN INDEX UNIQUE
name_UNIQUE
ONsetting
(code
ASC) VISIBLE Erreur dans la requête (1064): erreur de syntaxe près de 'VISIBLE' à la ligne 1CRÉER UN INDEX UNIQUE
uuid_UNIQUE
ONsetting
(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 génère automatiquement cela. Comment puis-je empêcher MySQL Workbench de faire cela?
Mes informations MySQL dans mon Ubuntu 18.04:
Version MySQL: 5.7.23-0ubuntu0.18.04.1 à PHP extension MySQLi
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 se génère automatiquement CREATE UNIQUE INDEX
instruction pour le serveur MySQL version 8.0 .
Dans MySQL Server 8.0 Docs , la syntaxe pour CREATE INDEX
est:
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}
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 cherchez pas à mettre à niveau vers la dernière version de MySQL; vous pouvez désactiver cette fonction de génération automatique avec VISIBLE / INVISIBLE
index:
Dans MySQL Workbench:
Aller à:
Édition> Préférences> Modélisation> MySQL.
Ensuite, définissez la "Version cible MySQL par défaut" sur 5.7
Vérifiez la capture d'écran ci-dessous:
dans Workbench: Modèle> Options du modèle ...> MySQL => décocher "Utiliser les valeurs par défaut des paramètres globaux
Version alternative à 5.7 ou 6.3. J'ai utilisé 6.3. Sur Modèle> Options du modèle ..> MySql> 6.3