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
相关产品推荐
相关产品推荐

