You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL存储过程动态SQL单引号丢失致1064错误的解决方法

解决MySQL存储过程动态SQL拼接中单引号丢失导致的1064语法错误

问题原因

你遇到的1064语法错误,本质是动态SQL拼接时单引号没有正确转义:在MySQL字符串中,单个单引号会被视为字符串的边界标记,而非内容。直接写' '时,MySQL会将其解析为字符串的结束,导致拼接后的SQL里丢失了单引号和空格,变成CONCAT(cv.name, , cv.value),触发语法错误。

解决方案

在动态SQL的拼接字符串中,用两个连续的单引号表示一个实际的单引号,这样MySQL会将其作为字符串内容保留下来。

修改后的存储过程示例

DELIMITER //
CREATE PROCEDURE get_products_id(IN column_name VARCHAR(100))
BEGIN
    SET @sql = CONCAT(
        'SELECT ', column_name, ', ',
        'CONCAT(`cv`.`name`, '' '', `cv`.`value`) AS `characteristic` ',
        'FROM products p ',
        'JOIN characteristic_values cv ON p.id = cv.product_id'
    );
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END //
DELIMITER ;

关键说明

  • 代码中'' ''是对' '的转义写法,拼接后会在最终SQL中生成' ',确保CONCAT函数的语法正确。
  • 后续如果需要拼接更多包含单引号的字符串,都遵循这个规则:用两个单引号代替一个单引号。

内容的提问来源于stack exchange,提问作者Kevin Valencia Cruz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 14:37:14