【问题标题】:Why does a MySql query, valid in Workbench, return syntax errors in phpmyadmin?为什么在 Workbench 中有效的 MySql 查询在 phpmyadmin 中返回语法错误?
【发布时间】:2020-09-14 02:51:49
【问题描述】:

所以我在 2 个不同的数据库中作为 id_information 和 id_information_backup 有 2 个表作为 table1 和 table2。这两个表都有以下列: (id bigint, name varchar, surname varchar) 我做了这个触发器,当用户在 table1 中输入姓名和姓氏时,它会计算它的 ascii 代码并进行一些计算并将其存储在“第二个表的名称”列,即“table2”。所有这些都在 Mysql 工作台中完成。当我将代码导入 phpmyadmin 时,它给了我太多的语法错误。我试图弄清楚我有什么语法错误,但我找不到。我在下面分享触发器。如果可以的话,请帮助我。我会很感激的。我想这是因为我使用的版本是 MySQL workbench 8.0 而我要导入的版本是 PHPmyadmin 4.9.4 。如果可以,请解决问题。

delimiter $$ 
CREATE DEFINER = CURRENT_USER TRIGGER `id_information`.`table1_after_INSERT1` AFTER INSERT ON `table1` FOR EACH ROW
BEGIN
declare p , r , copy, result, result1 decimal(64,0);
declare name1, surnam varchar(15);
declare a int;
set name1 = new.name;
set surnam = new.surname;
set a= 100;
set result =0;
set copy = 0;
set result1 =0;
set p =0 ;
set r =0 ;
with recursive cte as (
    select name1 as name1, left(name1, 1) as val, 1 as idx
    union all
    select name1, substring(name1, idx + 1, 1), idx + 1 
    from cte 
    where idx < char_length(name1)
)
select group_concat(ascii(val) + a order by idx separator '') ascii_word from cte into result;
with recursive ctee as (
    select surnam as surnam, left(surnam, 1) as vall , 1 as idxx
    union all
    select surnam, substring(surnam, idxx+ 1, 1), idxx+ 1 
    from ctee
    where idxx< char_length(surnam)
)
select group_concat(ascii(vall )  + a order by idxx separator '') ascii_word from ctee into result1;
select group_concat(result, result1) into copy;
insert into id_information_backup.table2  set table2.name = copy;
END$$
delimiter ;

【问题讨论】:

  • 它计算它的ascii码并进行一些计算并将它存储在第二个表的“name”列中,即“table2”。 为什么是十进制ASCII码?为什么不是十六进制? PS。 minimal fiddle
  • 当我将代码导入 phpmyadmin 时,它给了我太多的语法错误。 你的 MySQL 版本是多少?它必须是 8+,而不是 5+。
  • 正好是 8.0。现在我将它导入在线服务器,它有 phpmyadmin 4.9.4。你能告诉我如何解决这个问题。
  • 首先我选择了 bigint 数据类型来存储值,但我意识到有时如果名字和姓氏很大,那么 bigint 将无法存储这么大的数字。我将其存储为十进制 (64,0)。
  • phpmyadmin 给出“太多语法错误”会在将查询发送到 MySQL 之前尝试检查查询语法。如果它的版本太旧并且它不知道 8+ 版本的语法,那么它会报告“错误”也就不足为奇了。检查版本兼容性(当前 phpmyadmin 和 MySQL 8+)。

标签: mysql triggers phpmyadmin mysql-workbench version


【解决方案1】:

当您尝试运行命令(通过按 SQL 文本区域底部的“开始”按钮)时,会发生什么?

如果 phpMyAdmin 在提交之前将错误显示为 SQL 区域左侧带有白色 x 的红色圆圈,则这些是语法警告,不会影响您提交查询的能力。这些是 phpMyAdmin 中的 SQL linter 作为提示提供的。

phpMyAdmin 语法警告:

如果提交语句后出现错误,则错误来自 MySQL 本身,而不是直接由 phpMyAdmin 引起。

MySQL 语法错误:

【讨论】:

    【解决方案2】:

    在 PHPMyAdmin 中,您需要在主查询下的一个小框中设置分隔符

    它应该被签名为“分隔符”;-)

    我最后被那个抓住了几次:-D

    【讨论】:

      猜你喜欢
      • 2011-09-21
      • 2016-09-01
      • 2010-11-03
      • 1970-01-01
      • 2011-04-19
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多