从表varchar(100)
中名为Password
的D1
列开始,在表Users
中有一条记录,在对该列执行更新以在Password
列上使用EncryptByPassPhrase()
加密该列之后,将生成以下varbinary(8000)
字符串:
0x0342342565CF0
...and为了简单起见,字符串被缩写为....
。
为了能够将加密的varbinary(8000)
输出存储在同一个Password
列中,加密函数被包装为convert(varchar(8000), EncryptByPassPhrase())
。
运行select * from Users;
将产生它的两列和一条记录的输出:
姓名密码
如您所见,Password
显示为空白。但是,运行Select len(Password);
会显示一个52
值,因此肯定有一个字符串存储在Password
中,其中包含不可打印的字符。
因此,问题是,如何测试空白的varchar(100)
字符串的前两个变量字符是0x
?
这样做的目的是创建一个包装器加密函数来决定字段是否已经加密,而不是在检测到传递给它的字符串以0x
开始时再次加密吗?
发布于 2022-02-03 16:33:03
VARBINARY
值存储在VARCHAR
列中,以免您冒着永远得不到它的风险。0x
开头的二进制字符串的十六进制表示形式这一事实并不意味着0x
是值的一部分。https://dba.stackexchange.com/questions/306949
复制相似问题