首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >外键中允许的尾随空格

外键中允许的尾随空格
EN

Stack Overflow用户
提问于 2016-01-21 06:59:23
回答 2查看 883关注 0票数 4

问题: Server允许将尾随空格添加到外键中!

当然,这种行为在应用程序中会导致各种不必要的行为。如何才能阻止这一切?

示例: 1:n关系中的两个表:

代码语言:javascript
复制
create table products 
(
    pid nvarchar(20) primary key
;)

create table sales 
(
    pid nvarchar(20) references products(pid), 
    units int
);

现在插入主键'A'

代码语言:javascript
复制
insert into products (pid) values ('A');

现在插入外键:

代码语言:javascript
复制
-- 'A' is accepted, as expected:
insert into sales (pid, units) values ('A', 23); 

-- 'B' is declined, as expected:
insert into sales (pid, units) values ('B', 12); 

-- 'A ' (with a trailing space)
-- This is ACCEPTED, but of course this is NOT EXPECTED !! 
insert into sales (pid, units) values ('A ', 12);
EN

回答 2

Stack Overflow用户

发布于 2016-02-08 10:46:50

第二个问题是,这确实很难发现,因为:

代码语言:javascript
复制
    select pid from sales group by pid

只返回一个值:示例中的a

下面是一个帮助检测问题的技巧:

代码语言:javascript
复制
    select pid from sales group by binary(pid)

这将返回2行:a和A(带尾空格)

干杯,

票数 2
EN

Stack Overflow用户

发布于 2016-01-21 07:50:10

如果您只是简单地不想允许尾随空格:

代码语言:javascript
复制
create table sales 
(
    pid nvarchar(20) references products(pid), 
    units int,
    constraint CK_sales_pid CHECK (RIGHT(pid,1) <> ' ')
);

否则,你需要意识到这不仅仅是一个“意外”的情况。SQL Standard指出,当有两个长度不等的字符串时,短字符串首先填充空格以使长度相等,然后再进行比较。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34917261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档