需要获得中文汉字GB2312编码的十六进制代码,能够通过CAST('汉字' as Binvary)然后转换获得。
但在自定义函数中用同样的方法,返回的却是不一样的代码。
这是什么原因?怎么解决?
自定义函数如下:
IF OBJECT_ID(N'dbo.fn_CastTest',N'FN') IS NOT NULL
DROP FUNCTION dbo.fn_CastTest;
CREATE FUNCTION [dbo].[fn_CastTest](@Input NVARCHAR(100))
RETURNS VARCHAR(200)
AS
BEGIN
DECLARE @binStr VARBINARY(400);
DECLARE @HexStr VARCHAR(400);
SET @binStr=cast(@Input as VARBINARY);
SET @HexStr=master.sys.fn_varbintohexsubstring(0,@binStr,1,0);
RETURN @HexStr;
END
--测试:
SELECT [dbo].[fn_CastTest]('汉字') AS [Function], master.sys.fn_varbintohexsubstring(0,CAST('汉字' AS VARBINARY),1,0) AS [Direct]
/*
返回结果:
Function Direct
496c575b babad7d6
*/
------解决思路----------------------
字符串类型(或者说编码)不一样啊!
'汉字' 是 char()、@Input 是 varchar()。
------解决思路----------------------
应该要修改后者吧
SELECT [dbo].[fn_CastTest](N'汉字') AS [Function], master.sys.fn_varbintohexsubstring(0,CAST(N'汉字' AS VARBINARY),1,0) AS [Direct]