MySQL 定义变量后,使用报错

MySQL 定义变量后,使用报错

SET @REDISHOST = '172.16.2.129';

INSERT INTO `config_info` VALUES (2, 'ruoyi-gateway-dev.yml', 'DEFAULT_GROUP', 'spring:\n  redis:\n   ** host: '@REDISHOST'\n**    port: 6379\n    password: \n  cloud:\n    gateway:\n      discovery:\n        locator:\n          lowerCaseServiceId: true\n          enabled: true\n      routes:\n        # 认证中心\n        - id: ruoyi-auth\n          uri: lb://ruoyi-auth\n          predicates:\n            - Path=/auth/**\n          filters:\n            # 验证码处理\n            - CacheRequestFilter\n            - ValidateCodeFilter\n            - StripPrefix=1\n        # 代码生成\n        - id: ruoyi-gen\n          uri: lb://ruoyi-gen\n          predicates:\n            - Path=/code/**\n          filters:\n            - StripPrefix=1\n        # 定时任务\n        - id: ruoyi-job\n          uri: lb://ruoyi-job\n          predicates:\n            - Path=/schedule/**\n          filters:\n            - StripPrefix=1\n        # 系统模块\n        - id: ruoyi-system\n          uri: lb://ruoyi-system\n          predicates:\n            - Path=/system/**\n          filters:\n            - StripPrefix=1\n        # 数据采集模块\n        - id: ruoyi-demo\n          uri: lb://ruoyi-demo\n          predicates:\n            - Path=/demo/**\n          filters:\n            - StripPrefix=1\n        # 数据中心模块\n        - id: ruoyi-datacenter\n          uri: lb://ruoyi-datacenter\n          predicates:\n            - Path=/datacenter/**\n          filters:\n            - StripPrefix=1\n        # 文件服务\n        - id: ruoyi-file\n          uri: lb://ruoyi-file\n          predicates:\n            - Path=/file/**\n          filters:\n            - StripPrefix=1\n\n# 安全配置\nsecurity:\n  # 验证码\n  captcha:\n    enabled: true\n    type: math\n  # 防止XSS攻击\n  xss:\n    enabled: true\n    excludeUrls:\n      - /system/notice\n  # 不校验白名单\n  ignore:\n    whites:\n      - /auth/logout\n      - /auth/login\n      - /auth/register\n      - /*/v2/api-docs\n      - /csrf\n', 'bd28870e95ea58b70b80d6a2fe4e6bc8', '2020-05-14 14:17:55', '2022-11-22 07:42:40', 'nacos', '172.16.88.242', '', '', '网关模块', 'null', 'null', 'yaml', '', '');

报错提示:

[ERR] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@REDISHOST'\n port: 6379\n password: \n cloud:\n gateway:\n disco' at line 1

在MySQL中使用变量时,需要使用CONCAT函数将变量与字符串拼接在一起,你可以尝试修改你的SQL语句,将@REDISHOST变量拼接到字符串中,如下所示:

SET @REDISHOST = '172.16.2.129';
 
INSERT INTO `config_info` VALUES (2, 'ruoyi-gateway-dev.yml', 'DEFAULT_GROUP', CONCAT('spring:\n  redis:\n   host: ', @REDISHOST, '\n    port: 6379\n    password: \n  cloud:\n    gateway:\n      discovery:\n        locator:\n          lowerCaseServiceId: true\n          enabled: true\n      routes:\n        # 认证中心\n        - id: ruoyi-auth\n          uri: lb://ruoyi-auth\n          predicates:\n            - Path=/auth/**\n          filters:\n            # 验证码处理\n            - CacheRequestFilter\n            - ValidateCodeFilter\n            - StripPrefix=1\n        # 代码生成\n        - id: ruoyi-gen\n          uri: lb://ruoyi-gen\n          predicates:\n            - Path=/code/**\n          filters:\n            - StripPrefix=1\n        # 定时任务\n        - id: ruoyi-job\n          uri: lb://ruoyi-job\n          predicates:\n            - Path=/schedule/**\n          filters:\n            - StripPrefix=1\n        # 系统模块\n        - id: ruoyi-system\n          uri: lb://ruoyi-system\n          predicates:\n            - Path=/system/**\n          filters:\n            - StripPrefix=1\n        # 数据采集模块\n        - id: ruoyi-demo\n          uri: lb://ruoyi-demo\n          predicates:\n            - Path=/demo/**\n          filters:\n            - StripPrefix=1\n        # 数据中心模块\n        - id: ruoyi-datacenter\n          uri: lb://ruoyi-datacenter\n          predicates:\n            - Path=/datacenter/**\n          filters:\n            - StripPrefix=1\n        # 文件服务\n        - id: ruoyi-file\n          uri: lb://ruoyi-file\n          predicates:\n            - Path=/file/**\n          filters:\n            - StripPrefix=1\n\n# 安全配置\nsecurity:\n  # 验证码\n  captcha:\n    enabled: true\n    type: math\n  # 防止XSS攻击\n  xss:\n    enabled: true\n    excludeUrls:\n      - /system/notice\n  # 不校验白名单\n  ignore:\n    whites:\n      - /auth/logout\n      - /auth/login\n      - /auth/register\n      - /*/v2/api-docs\n      - /csrf\n'), 'bd28870e95ea58b70b80d6a2fe4e6bc8', '2020-05-14 14:17:55', '2022-11-22 07:42:40', 'nacos', '172.16.88.242', '', '', '网关模块', 'null', 'null', 'yaml', '', '');

MySQL 报错提示中显示语法错误,提示变量 @REDISHOST 在 INSERT INTO 语句中的引用存在问题。具体地,在 spring 中 Redis 的 host 属性应该使用字符串字面量代替变量名。
您可以尝试将 INSERT INTO 语句修改为以下形式:

INSERT INTO `config_info` VALUES (
  2,
  'ruoyi-gateway-dev.yml',
  'DEFAULT_GROUP',
  'spring:
    redis:
      host: \'' + @REDISHOST + '\'
      port: 6379
      password:
    cloud:
      gateway:
        discovery:
          locator:
            lowerCaseServiceId: true
            enabled: true
        routes:
          # 认证中心
          - id: ruoyi-auth
            uri: lb://ruoyi-auth
            predicates:
              - Path=/auth/**
            filters:
              # 验证码处理
              - CacheRequestFilter
              - ValidateCodeFilter
              - StripPrefix=1
          # 代码生成
          - id: ruoyi-gen
            uri: lb://ruoyi-gen
            predicates:
              - Path=/code/**
            filters:
              - StripPrefix=1
          # 定时任务
          - id: ruoyi-job
            uri: lb://ruoyi-job
            predicates:
              - Path=/schedule/**
            filters:
              - StripPrefix=1
          # 系统模块
          - id: ruoyi-system
            uri: lb://ruoyi-system
            predicates:
              - Path=/system/**
            filters:
              - StripPrefix=1
          # 数据采集模块
          - id: ruoyi-demo
            uri: lb://ruoyi-demo
            predicates:
              - Path=/demo/**
            filters:
              - StripPrefix=1
          # 数据中心模块
          - id: ruoyi-datacenter
            uri: lb://ruoyi-datacenter
            predicates:
              - Path=/datacenter/**
            filters:
              - StripPrefix=1
          # 文件服务
          - id: ruoyi-file
            uri: lb://ruoyi-file
            predicates:
              - Path=/file/**
            filters:
              - StripPrefix=1

  # 安全配置
  security:
    # 验证码
    captcha:
      enabled: true
      type: math
    # 防止XSS攻击
    xss:
      enabled: true
      excludeUrls:
        - /system/notice
    # 不校验白名单
    ignore:
      whites:
        - /auth/logout
        - /auth/login
        - /auth/register
        - /*/v2/api-docs
        - /csrf
  ',
  'bd28870e95ea58b70b80d6a2fe4e6bc8',
  '2020-05-14 14:17:55',
  '2022-11-22 07:42:40',
  'nacos',
  '172.16.88.242',
  '',
  '',
  '网关模块',
  'null',
  'null',
  'yaml',
  '',
  ''
);

这里使用了字符串拼接来将 @REDISHOST 的值插入到 SQL 语句中的字符串字面量中。

报错信息是你的sql有问题, @REDISHOST'\n port: 6379\n password: \n cloud:\n gateway:\n disco 靠近这个语句的地方,引号应该是不匹配的,看下是sql太长还是什么问题

img

多了单引号,把@REDISHOST前后的单引号都去掉试下:


SET @REDISHOST = '172.16.2.129';
 
INSERT INTO `config_info` VALUES (2, 'ruoyi-gateway-dev.yml', 'DEFAULT_GROUP', 'spring:\n  redis:\n   ** host: @REDISHOST\n**    port: 6379\n    password: \n  cloud:\n    gateway:\n      discovery:\n        locator:\n          lowerCaseServiceId: true\n          enabled: true\n      routes:\n        # 认证中心\n        - id: ruoyi-auth\n          uri: lb://ruoyi-auth\n          predicates:\n            - Path=/auth/**\n          filters:\n            # 验证码处理\n            - CacheRequestFilter\n            - ValidateCodeFilter\n            - StripPrefix=1\n        # 代码生成\n        - id: ruoyi-gen\n          uri: lb://ruoyi-gen\n          predicates:\n            - Path=/code/**\n          filters:\n            - StripPrefix=1\n        # 定时任务\n        - id: ruoyi-job\n          uri: lb://ruoyi-job\n          predicates:\n            - Path=/schedule/**\n          filters:\n            - StripPrefix=1\n        # 系统模块\n        - id: ruoyi-system\n          uri: lb://ruoyi-system\n          predicates:\n            - Path=/system/**\n          filters:\n            - StripPrefix=1\n        # 数据采集模块\n        - id: ruoyi-demo\n          uri: lb://ruoyi-demo\n          predicates:\n            - Path=/demo/**\n          filters:\n            - StripPrefix=1\n        # 数据中心模块\n        - id: ruoyi-datacenter\n          uri: lb://ruoyi-datacenter\n          predicates:\n            - Path=/datacenter/**\n          filters:\n            - StripPrefix=1\n        # 文件服务\n        - id: ruoyi-file\n          uri: lb://ruoyi-file\n          predicates:\n            - Path=/file/**\n          filters:\n            - StripPrefix=1\n\n# 安全配置\nsecurity:\n  # 验证码\n  captcha:\n    enabled: true\n    type: math\n  # 防止XSS攻击\n  xss:\n    enabled: true\n    excludeUrls:\n      - /system/notice\n  # 不校验白名单\n  ignore:\n    whites:\n      - /auth/logout\n      - /auth/login\n      - /auth/register\n      - /*/v2/api-docs\n      - /csrf\n', 'bd28870e95ea58b70b80d6a2fe4e6bc8', '2020-05-14 14:17:55', '2022-11-22 07:42:40', 'nacos', '172.16.88.242', '', '', '网关模块', 'null', 'null', 'yaml', '', '');