Chr*_*s L 65 sql-server varchar
目前在我们的 SQL Server 2012 数据库中,我们正在使用varchar,我们想改变它nvarchar。我已经生成了一个脚本来做到这一点。
我的问题是 SQL Server 写入varchar列的方式与写入列的方式有什么不同吗?nvarchar列的吗?我们有一些我很关心的后端程序。
编辑:
不确定这是否有帮助,但这些列没有索引、f/k 或约束。
Aar*_*and 51
您需要确保使用 N 前缀作为 Unicode 字符串文字的前缀。例如,如果基础数据类型是NVARCHAR:
CREATE TABLE dbo.t(c NVARCHAR(32));
INSERT dbo.t(c) SELECT '???';
INSERT dbo.t(c) SELECT '???';
INSERT dbo.t(c) SELECT N'???';
SELECT c FROM dbo.t;
SELECT c FROM dbo.t WHERE c = '???';
SELECT c FROM dbo.t WHERE c = N'???';
Run Code Online (Sandbox Code Playgroud)
结果:
c
----
??? -- not stored correctly
??? -- not stored correctly
??? -- stored correctly!
c
----
???
??? -- probably not expected, however all Unicode characters have been changed to ?
c
----
???
Run Code Online (Sandbox Code Playgroud)
对于那些在移动设备或老旧浏览器上显示框字符而不是实际 Unicode 字符的用户,它是这样的:

db2*_*db2 41
最大的问题是nvarchar每个字符使用 2 个字节,而varchar使用 1个字节。因此,nvarchar(4000)使用与varchar(8000)*相同的存储空间量。
除了所有字符数据需要两倍的存储空间之外,这还意味着:
nvarchar列来使行保持在 8060 字节行限制/8000 字节字符列限制内。nvarchar(max)列,它们会比varchar(max)原来更早地被推离行。nvarchar列以保持在 900 字节的索引键限制内(我不知道您为什么要使用如此大的索引键,但您永远不知道)。除此之外nvarchar,假设您的客户端软件是为处理 Unicode 而构建的,则使用 with并没有太大的不同。SQL Server 将透明地将 a 转换varchar为nvarchar,因此除非您在文字中使用 2 字节(即 Unicode)字符,否则您并不严格需要字符串文字的 N 前缀。请注意,强制转换nvarchar为varbinary与使用varchar. 重要的一点是,您不必立即将每个 varchar 文字更改为 nvarchar 文字以保持应用程序正常工作,这有助于简化流程。
* 如果您使用数据压缩(轻量级行压缩就足够了,SQL Server 2016 SP1 之前的企业版需要),由于Unicode 压缩(使用SCSU 算法),您通常会发现nchar并且nvarchar占用的空间不超过charand 。varchar
rch*_*cko 20
认为以下是主要区别:
| 归档时间: |
|
| 查看次数: |
250082 次 |
| 最近记录: |