【问题标题】:MySQL Workbench: Error in query (1064): Syntax error near 'VISIBLE' at line 1MySQL Workbench:查询中的错误(1064):第 1 行的“VISIBLE”附近的语法错误
【发布时间】: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

【问题讨论】:

    标签: mysql mysql-workbench


    【解决方案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 DocsCREATE 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 => 取消选中“使用全局设置中的默认值

      【讨论】:

        猜你喜欢
        • 2017-05-06
        • 2023-02-13
        • 1970-01-01
        • 1970-01-01
        • 2021-10-05
        • 1970-01-01
        • 2017-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多