插入不带前缀'N ....'的Unicode字符串

时间:2014-05-28 18:06:46

标签: sql sql-server sql-server-2012

这个问题的背景是我有一个具有以下定义的专栏:

FirstName VARCHAR(100).

如果我将列数据类型更改为NVARCHAR,并且插入值时我可以插入一个THAI /中文/欧洲值,我需要用N前缀它,如

Insert into table ([FirstName]) value(N'THAI/Chinese/European value').

问题:

有很多应用程序更新了这个特定的列,为了帮助我进行这项更改,我需要对程序和各种其他应用程序级别的更改进行大量更改。有没有办法可以在数据库级别进行更改,以便我可以适应这种变化。

3 个答案:

答案 0 :(得分:1)

  

有没有办法可以在数据库级别进行更改,以便我可以适应这种变化。

我不相信有任何方法可以强制SQL Server将所有varchars作为unicode nvarchars处理。它们只是不同的数据类型。

如果在SQL代码中使用文字,则必须使用N''。保存数据的任何列,参数或变量都必须是nchar / nvarchar。您的应用程序都必须将unicode值发送到数据库。

我会搜索" sql server迁移到unicode"在你开始之前进行额外的阅读。

答案 1 :(得分:1)

虽然我同意@TimLehner我不知道强制SQL Server将所有varchar列作为nvarchar列处理的方法,但有一些事情可以使成为你的更容易转换到列中的Unicode字符串:

  1. 要在列中一次性或在升级脚本中支持Unicode值,请使用ALTER TABLE [table] ALTER COLUMN FirstName nvarchar(100)。 (当然,如果适用,请务必更新[table]的创建脚本 - 例如CREATE TABLE [table] (FirstName nvarchar(100)...)。)
  2. 使用Unicode(即N'SomeFirstName')文字,希望插入或设置带有Unicode字符的字符串; 继续使用非Unicode(即'SomeFirstName')字面值,而在转换中
  3. 努力改变程序'根据需要参数(即从varcharnvarchar)。
  4. 基本上,理想情况下您可以更改列及其相关内容,以便立即支持Unicode;但您可以将初始更改限制为最初需要利用该列的基础Unicode支持的应用程序,过程等。

答案 2 :(得分:0)

您可以使用存储过程进行插入和更新。如果整个应用程序使用它,您只能更新存储过程...

但我想这仍然需要对所有地点进行更新,所以我想这不是那么多帮助......