作为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认为参照完整性约束效率低下,因此我们最终会在表格中对数据进行不一致的数据类型定义。)
我的印象准确吗?
答案 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