MySQL Workbench:查询中的错误(1064):第 1 行的“VISIBLE”附近的语法错误

Posted

技术标签:

【中文标题】MySQL Workbench:查询中的错误(1064):第 1 行的“VISIBLE”附近的语法错误【英文标题】:MySQL Workbench: Error in query (1064): Syntax error near 'VISIBLE' at line 1 【发布时间】:2019-03-18 00:22:25 【问题描述】:

知道为什么下面的VISIBLE 会导致问题吗?

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;

错误:

创建唯一索引 name_UNIQUE ON setting (code ASC) 可见 查询中的错误 (1064):第 1 行的“VISIBLE”附近的语法错误

创建唯一索引 uuid_UNIQUE ON setting (uuid ASC) 可见 查询中的错误 (1064):第 1 行的“VISIBLE”附近的语法错误

如果我删除 VISIBLE 不会出错,但 MySQL Workbench 8.0.12 会自动生成。如何阻止 mysql Workbench 这样做?

我在 Ubuntu 18.04 中的 MySQL 信息:

MySQL 版本:5.7.23-0ubuntu0.18.04.1 通过 php 扩展 MySQLi

【问题讨论】:

【参考方案1】:

5.7 或 6.3 的替代版本。我用的是6.3。在模型>模型选项..>MySql>6.3

【讨论】:

【参考方案2】:

这里的问题是不同 MySQL 服务器版本的语法差异。 MySQL Workbench 8.0.12 似乎正在为 MySQL 服务器 version 8.0 自动生成 CREATE UNIQUE INDEX 语句。

从MySQL Server 8.0 Docs,CREATE INDEX 的语法是:

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

但是,VISIBLE | INVISIBLE 的这个选项在 MySQL Server 5.7 中不可用。来自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

如果您不想升级到最新版本的 MySQL;您可以使用VISIBLE / INVISIBLE 索引禁用此自动生成功能:

在 MySQL 工作台中:

转到:

编辑 > 首选项 > 建模 > MySQL。

然后,将“默认目标 MySQL 版本”设置为 5.7

查看下面的截图:

【讨论】:

谢谢。有什么想法可以升级到 MySQL 服务器 8.0 版吗? @laukok 您可以按照此链接中给出的步骤进行操作:tecmint.com/install-mysql-8-in-ubuntu @MadhurBhaiya VISIBLE 在将架构从一台 5.7 服务器传输到另一台服务器时仍然生成,即使设置了默认目标 MySQL 版本 5.7。这似乎是 Manjaro Linux 中 MySQL Workbench 8.0.19-2 的一个错误。 @kkzxak47 请按照此处的说明报告错误:dev.mysql.com/doc/workbench/en/workbench-reporting-bugs.html 我在 MariaDB 10.3.27 和 MySQL Workbench 8.0.22 上遇到了同样的问题。在 MySQL Workbench 中将 Target MySQL Version 设置为 5.7 就可以了。谢谢!【参考方案3】:

在工作台中: 模型 > 模型选项 ... > MySQL => 取消选中“使用全局设置中的默认值

【讨论】:

以上是关于MySQL Workbench:查询中的错误(1064):第 1 行的“VISIBLE”附近的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

MySQL Workbench - 如何诊断查询失败问题

win10 数据库 安装mysql和workbench

MySQL Workbench 6.3 (Mac) 挂起简单查询

在 MySQL Workbench 中显示错误

java中的简单mysql选择比MySQL Workbench中的慢

在Ubuntu 16.10安装mysql workbench报未安装软件包 libpng12-0错误