一尘不染

varchar和nvarchar的区别

sql

目前在我们的 SQL Server 2012 数据库中,我们正在使用varchar,我们想更改它nvarchar。我已经生成了一个脚本来做到这一点。

我的问题是 SQL Server 写入varchar列与nvarchar列的方式有什么不同吗?我们有许多我担心的后端程序。

编辑:
不确定这是否有帮助,但列上没有索引、f/k 或约束。


阅读 77

收藏
2022-10-26

共1个答案

一尘不染

您需要确保为 Unicode 字符串文字加上 N 前缀。例如,如果基础数据类型是,这些将不同地工作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'រៀន';

结果:

c
----
??? -- not stored correctly
??? -- not stored correctly
រៀន -- stored correctly!

c
----
???
??? -- probably not expected, however all Unicode characters have been changed to ?

c
----
រៀន

对于那些在移动设备或老旧的浏览器上显示框字符而不是实际 Unicode 字符的用户,它看起来像这样:

在此处输入图像描述

2022-10-26