如何在MSSQL的NVARCHAR()列中插入包含#0的字符串?

时间:2012-10-23 10:12:16

标签: sql-server sql-server-2008 delphi delphi-xe2 ado

我确信这有一个非常简单的解决方案,但我已经耗尽了我的资源。我需要在MSSQL2k8的WideString列中插入一堆#0个可能包含NVARCHAR(1024)的变量。 #0被视为转换中某处的字符串终止符...因此,当我存储#6'r'#0'abc'时,只存储#6'r'。我正在使用TADOQuery。我该怎么办?


这是我使用的代码:

var
  S: string;
begin
  S := #6'r'#0'abc';
  ADOQuery1.Append;
  ADOQuery1S.Value := S;
  { At this point, S = #6'r'#0'abc' and ADOQuery1S.Value = #6'r';}
  ADOQuery1.Post;
end;

2 个答案:

答案 0 :(得分:5)

如果要存储通过任何可能包含NULL的方式加密的字符串,请使用Soap.EncdDecd.pas(旧版本中的EncdDecd.pas)中的例程将加密数据编码并解码为Base64。

DO USE 正确加密,可以是Microsoft CryptoAPI,也可以是DCPCrypt等任何本地Delphi实现。

如果要存储用于访问系统的密码,请考虑对它们进行散列(和腌制)。显然,如果它们是连接到其他系统的密码,则无法做到这一点。

var
  B64: string;
begin
  B64 := EncodeString(#6'r'#0'abc');
  ADOQuery1.Append;
  ADOQuery1S.Value := B64;
  ADOQuery1.Post;
end;

答案 1 :(得分:2)

如果您可以更改架构,请改用VARBINARY或IMAGE。 这些字段类型旨在保存二进制数据。

create table MY_DATA ( FLD_1 varbinary(2048), FLD_2 image )