CHAR与VARCHAR以及加入时的后果

时间:2011-05-12 13:07:12

标签: sql sql-server

作为this之前的帖子讨论了何时想要使用CHAR over VARCHAR指出,当存储的值大致相同时,可以获得性能优势。当然,我会选择CHAR作为存储2个字符的状态代码数据的数据类型。

我想确认一个完整性检查,这意味着当一个人执行一个过滤此列的SQL时,必须用足够的空格填充过滤的值,以等于char字段的定义长度。

例如,假设一个表“CODE_TABLE”,其中第10_CHAR_CODE列定义为CHAR(10):

SELECT * FROM CODE_TABLE WHERE 10_CHAR_CODE ='ABCDE'

并且如果10_CHAR_CODE是另一个表的“逻辑”外键但是不存在特定的关系完整性约束,则存储在10_CHAR_CODE查找表中的值理想情况下应该具有相同的数据类型(Char(10)以避免必须加入时执行低效的RTRIM功能。

(我们有一个婴儿大小的数据仓库,而且DBA认为参照完整性约束效率低下,因此我们最终会在表格中对数据进行不一致的数据类型定义。)

我的印象准确吗?

2 个答案:

答案 0 :(得分:7)

在SQL Server中的字符串比较中忽略尾随空格。没有必要自己RTRIM(这会使条件无法实现)

答案 1 :(得分:1)

马丁似乎是正确的。您可能希望测试数据库中使用的特定排序规则。这是一些测试代码:

DECLARE @ten_char_field char(10),
        @ten_char_varchar varchar(10)

SET @ten_char_field = 'ABCD'
SET @ten_char_varchar = 'ABCD'

SELECT @ten_char_field, CASE WHEN @ten_char_field = 'ABCD' THEN 1 ELSE 0 END,
        @ten_char_varchar, CASE WHEN @ten_char_varchar = 'ABCD' THEN 1 ELSE 0 END