执行含单引号数据的SQL INSERT语句报语法错误如何解决
报错原因
这条INSERT语句语法报错的核心诱因有2个,另有1个易引发数据错误的隐患:
- 字符串内单引号未转义:SQL以单引号作为字符串边界标识,被单引号包裹的字符串内容如果本身包含单引号,必须用两个连续单引号做转义(ANSI SQL标准写法,兼容所有主流数据库)。你写的
Gift your Dear one's里的单引号会被数据库判定为字符串提前终止,后续内容解析错位,直接触发语法错误。 - 误用HTML转义实体:语句里的
"是HTML场景的双引号转义实体,SQL语法无法识别。由于字符串外层用单引号包裹,内部的双引号不会和SQL语法冲突,直接书写双引号即可。 - 邮编字段值隐患:PostalCode位置你写的是无引号的
012,如果该字段是字符类型(邮编通常以字符串存储,避免前导0丢失),不加引号会被解析为数字12,丢失开头的0。
修正后可直接执行的SQL
已修复上述问题,同时移除了字段值前后无意义的冗余空格,若业务需要保留前后空白可自行添加:
INSERT INTO Customers (CustomerId, ContactNumber, MsgContent, City, PostalCode, Country) VALUES (1, '123456', '["https://example-img-storage-path","Gift your Dear one''s with surprise gifts","abc","123","xyz"]', 'mno', '012', 'pqr');
补充说明:如果你使用MySQL数据库,也可以用反斜杠转义单引号,将
one''s写为one\'s,但连续双单引号的写法是SQL标准,跨数据库兼容性更好。
内容的提问来源于stack exchange,提问作者Sulu
相关产品推荐
相关产品推荐

