MS T-SQL 是不是包含名为 varchar2 的数据类型?如果是这样,它和varchar之间有啥区别?

Posted

技术标签:

【中文标题】MS T-SQL 是不是包含名为 varchar2 的数据类型?如果是这样,它和varchar之间有啥区别?【英文标题】:Does MS T-SQL include a data type called varchar2? and if so, what's the difference between it and between varchar?MS T-SQL 是否包含名为 varchar2 的数据类型?如果是这样,它和varchar之间有什么区别? 【发布时间】:2009-03-07 06:46:33 【问题描述】:

在一次采访中被问到这个问题。

【问题讨论】:

你应该在消息中提问,而不是在标题中提问。 好吧,冷冰冰。抱歉,*** 的新手 你仍然可以纠正那个:) 【参考方案1】:

没有。 varchar2 是 Oracle 数据类型,相当于它(以及 TSQL 的)自己的 varchar

澄清

Oracle 的varcharvarchar2 之间的区别似乎起源于the ANSI SQL standard was still being formulated。我无法找到任何明确的参考资料,说明最初的实现差异(如果有的话)是什么(Oracle 7 之前),因为这仍然是a source of confusion。可以说,自从Oracle 7 以来,这两者实际上被视为同义词。两者都在版本 8 中得到了改进(最大大小从 2k 变为 4k)。请注意,TSQL 的 varchar 可以存储 8k。

【讨论】:

【参考方案2】:

我从未听过 Vlad 的建议,即 VARCHAR 数据类型过去只支持 2k 的数据。鉴于它们在自 8.1.7 以来的每个版本中都是同义词(我没有检查早期版本的文档),这对我来说似乎很奇怪。弗拉德,你有这方面的参考吗?

来自SQL Reference section on the VARCHAR data type

VARCHAR 数据类型当前是 与 VARCHAR2 数据类型同义。 Oracle 建议您使用 VARCHAR2 而不是 VARCHAR。在里面 未来,VARCHAR 可能被定义为 用于的单独数据类型 变长字符串 比较不同的比较 语义。

由于 Oracle 早于 SQL 标准,Oracle 中的某些比较语义与标准不匹配(例如比较 NULL 和空字符串)。理论上,Oracle 拥有 VARCHAR 数据类型,因此他们将来可以更改 VARCHAR 数据类型的比较语义以匹配 SQL 标准,而不会影响使用 VARCHAR2 数据类型的应用程序的向后兼容性。

【讨论】:

原始答案中存在一些混淆,源于我使用的二级来源,无法得到一手来源的确认。混淆可能是由于 rel7 到 rel8 的更改和 pre-rel7 实施差异的组合(如果有的话 - 没有关于主题的主要来源) 原始答案已相应更新。感谢您指出这一点。

以上是关于MS T-SQL 是不是包含名为 varchar2 的数据类型?如果是这样,它和varchar之间有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Access 中的 T-SQL 直通查询是不是可以包含本地 Access 表?

如果数据库表格单元格的内容是一个列表,我如何检查该列表是不是包含 T-SQL 中的特定值?

Oracle中VARCHAR2的大小声明为1字节是啥意思?

sql 用于空白MS-SQL(T-SQL)存储过程的模板。

将 MS Access 查询(使用 IIF() 和 DATESERIAL())事务处理到 T-SQL

T-SQL:如何使单元格值唯一?