2011-06-26 35 views
0

我在數據庫中存儲加密的密碼,它在MachineA上運行良好。現在,我轉移到MachineB似乎結果在表中損壞。在SQL Server 2008 R2中存儲這樣的字符

例如:ù9qÆæ\2 Ý-³Å¼]ó將在表中更改爲?9q??\2 ?-³?¼]?

那是我的查詢使用:

ALTER PROC [Employees].[pRegister](@UserName NVARCHAR(50),@Password VARCHAR(150)) 

AS 
BEGIN 

DECLARE @Id UNIQUEIDENTIFIER 
SET @Id = NEWID() 

SET @password = HashBytes('MD5', @password + CONVERT(VARCHAR(50),@Id)) 

SELECT @Password 

INSERT INTO Employees.Registry (Id,[Name],[Password]) VALUES (@Id, @UserName,@Password) 

END 
  • 整理:SQL_Latin1_General_CP1_CI_AS
  • 的ProductVersion:10.50.1600.1

感謝

回答

2

你混合2種數據類型:

  • 密碼必須爲nvarchar支持非西歐字符
  • 文字要n個前綴

演示:

DECLARE @pwdgood nvarchar(150), @pwdbad varchar(150) 
SET @pwdgood = N'ù9qÆæ\2 Ý-³Å¼]ó' 
SET @pwdbad = N'?9q??\2 ?-³?¼]?' 
SELECT @pwdgood, @pwdbad 
  • HashBytes給varbinary(8000),所以你需要這個在表

注:我也想考慮的東西其他比ID列中該行

+0

非常感謝您醃製存儲的密碼! –

0

如果你想存儲這樣的字符,你需要:

  • 使用NVARCHAR的數據類型的列和參數(@PasswordNVARCHARCAST你使用不使用NVARCHAR要麼,你的樣品中指定的數據庫表中的密碼... )
  • 使用N'....'語法表示Unicode字符串

有了這兩個基本到位,你絕對應該能夠存儲和檢索任何有效的Unicode字符

相關問題