Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql CHAR与VARCHAR以及加入时的后果_Sql_Sql Server - Fatal编程技术网

Sql CHAR与VARCHAR以及加入时的后果

Sql CHAR与VARCHAR以及加入时的后果,sql,sql-server,Sql,Sql Server,正如前一篇文章(讨论了何时使用CHAR而不是VARCHAR)所指出的,当存储的值长度大致相同时,可以获得性能优势。当然,我会选择CHAR作为存储2个字符状态代码数据的数据类型 我只是想确认一下,作为一个健全性检查,这意味着当执行对该列进行过滤的SQL时,必须用足够的空格填充过滤后的值,以使其等于定义的char字段长度 例如,假设一个表“CODE\U table”,其中第10列CHAR\U CODE定义为CHAR(10): 从代码表中选择*,其中10字符代码='ABCDE' 如果10_CHAR_代

正如前一篇文章(讨论了何时使用CHAR而不是VARCHAR)所指出的,当存储的值长度大致相同时,可以获得性能优势。当然,我会选择CHAR作为存储2个字符状态代码数据的数据类型

我只是想确认一下,作为一个健全性检查,这意味着当执行对该列进行过滤的SQL时,必须用足够的空格填充过滤后的值,以使其等于定义的char字段长度

例如,假设一个表“CODE\U table”,其中第10列CHAR\U CODE定义为CHAR(10):

从代码表中选择*,其中10字符代码='ABCDE'

如果10_CHAR_代码是另一个表的“逻辑”外键,但不存在特定的关系完整性约束,则存储在10_CHAR_代码查找表中的值理想情况下应为相同的数据类型(CHAR(10),以避免在加入时必须执行低效的RTRIM函数

(我们有一个小规模的数据仓库,DBA认为引用完整性约束效率低下,因此我们最终会在表之间使用不一致的数据类型定义。)


我的印象准确吗?

在SQL Server的字符串比较中,尾随空格被忽略。无需
RTRIM
自己动手(这会使条件无法组织)

Martin似乎是正确的。您可能需要测试数据库中使用的特定排序规则。以下是一些测试代码:

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

从我读到的几件事来看,实际上,在整数上进行连接比在varchar列上进行连接可以获得更好的性能。:-D