什么是正确的SQL法插入一个值有一撇呢?

Insert into Person
  (First, Last)
Values
  'Joe',
  'O'Brien'

我得到一个错误因为我觉得撇在O是的结束标签的值。

有帮助吗?

解决方案

逃脱您的SQL中的撇号(即双重报价字符):

INSERT INTO Person
    (First, Last)
VALUES
    ('Joe', 'O''Brien')
              /\
          right here  

同样适用于选择查询:

SELECT First, Last FROM Person WHERE Last = 'O''Brien'

Apostrophe或单语言是SQL中的一个特殊字符,它指定字符串数据的开始和结尾。这意味着将其用作文字字符串数据的一部分,您需要 escape 特殊角色。使用单语言,这通常是通过加倍的报价来完成的。 (两个单语字符,而不是双引号,而不是单个报价。)

笔记: :您只需要担心此问题时通过RAW SQL接口手动编辑数据,因为在开发和测试之外编写查询应该是罕见的。在代码中,有一些技术和框架(取决于您的堆栈)来负责逃避特殊角色, SQL注入, , ETC。

其他提示

您只需要加倍的引号...

insert into Person (First, Last)
values ('Joe', 'O''Brien')

您需要逃脱撇号。在 T-SQL 这是一个双撇号,所以你 insert 声明变为:

Insert into Person
(First, Last)
Values
'Joe', 'O''Brien'

因为一个单一的报价是用于表明开始和结束的一串;你需要逃避它。

简短的回答是使用两个报价- '' -为了一个,SQL数据库,用以储存值为 '.

看看使用替代清理传入的价值观:

你想要检查 '''', 和替换他们,如果它们存在于字符串 '''''' 为了逃脱孤单一的报价。

Eduffy有个好主意. 。他只是在代码示例中倒退了。在JavaScript或Sqlite中,您可以用重音符号替换撇号。

他(我敢肯定)将重音符号作为字符串的定界符,而不是在奥布莱恩(O'Brian)中取代撇号。实际上,对于大多数情况,这是一个非常简单的解决方案。

可以通过打电话来插入撇号字符 char 撇号的功能 ASCII表格查找 值,39。然后可以将字符串值与 联合操作员.

Insert into Person
  (First, Last)
Values
  'Joe',
  concat('O',char(39),'Brien')

单语引用通过加倍而逃脱,

以下SQL说明了此功能。

declare @person TABLE (
    [First] nvarchar(200),
    [Last] nvarchar(200)
)

insert into @person 
    (First, Last)
values
    ('Joe', 'O''Brien')

select * from @person

结果

First   | Last
===================
Joe     | O'Brien

在值周围使用双引号。

insert into Person (First, Last) Values("Joe","O'Brien")

代替使用回压(在〜键上);

`O'Brien`
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top