我听说过Oracle中的varchar2 emp_name varchar2(10)如果我们输入小于10的值,则自动删除剩余空间
在SQL中我们如何才能实现这一目标。 通过使用nvarchar我们可以在SQL中实现相同的功能吗?
答案 0 :(得分:0)
AFAIK,varchar2是Oracle独有的,因此在任何其他数据库系统中都没有完全匹配。争议点是ANSI合规性。 Oracle的varchar和varchar2将空字符串视为NULL,而ANSI标准则将空字符串视为NULL。 Oracle中varchar和varchar2的区别在于Oracle承诺永远不会改变varchar2的行为;另一方面,varchar可能在某些阶段符合ANSI标准。出于这个原因,Oracle鼓励您使用varchar2,这样就不会因为空值和空字符串处理的最终更改而导致应用程序中断。
nvarchar又有所不同,原因完全不同:nvarchar列包含Unicode字符,每个字符使用两个字节,而不是varchars。
所以我们可以看到nvarchar和varchar2不等价。但是,在您的问题的有限意义上,即当您存储长度小于字段的最大集合的字符串时会发生什么,那么出于实际目的,它们确实表现相同,因为该值未填充空格弥补长度。请注意,这不是您描述的行为:没有任何内容"自动删除&#34 ;;只是没有任何东西被自动填充。
修改
对于SQL Server,请阅读here以获取varchar(和nvarchar)实际存储的说明。你的大四学生完全错了。使用varchar或nvarchar(50)将不会使用每个记录50(或100)个字节。使用的存储空间仅是每条记录所需的数量。 AFAIK所有dbs的行为都相似。