Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将SQL Server Varbinary数据类型解码为Java字符串_Java_Sql Server_Hibernate_Varbinary - Fatal编程技术网

将SQL Server Varbinary数据类型解码为Java字符串

将SQL Server Varbinary数据类型解码为Java字符串,java,sql-server,hibernate,varbinary,Java,Sql Server,Hibernate,Varbinary,试图绕过Java中的Jboss Hibernate问题,在该问题中,您无法从存储过程处理Nvarchar SQL Server数据类型。我无法将数据类型转换或强制转换为varchar,因为我们存储多字节字符,因此,数据类型是必须的。但是,我能够在存储过程中将类型转换为varbinary,并用Java进行解码 SQL Server进程: Convert(varbinary, Tile) AS Title 在Java端,我读取结果集和字段,现在编码为 更新为实际编码: 我尝试将此bytearra

试图绕过Java中的Jboss Hibernate问题,在该问题中,您无法从存储过程处理Nvarchar SQL Server数据类型。我无法将数据类型转换或强制转换为varchar,因为我们存储多字节字符,因此,数据类型是必须的。但是,我能够在存储过程中将类型转换为varbinary,并用Java进行解码

SQL Server进程:

Convert(varbinary, Tile)  AS Title
在Java端,我读取结果集和字段,现在编码为

更新为实际编码:

我尝试将此bytearray解析为字符串,如下所示:

            byte[] bytes = (byte[]) dataField[0]; 

            try {

                String varbinaryString = new String(bytes, "UTF-8");
                System.out.println(varbinaryString);



            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
结果几乎是标题字段中的预期解码字符串,只是,它以以下方式解码:

D e s i g n  &  P l a n n i
而不是直截了当的

Design & Planning Director
在Java解码SQL Server varbinary数据类型时,有人能帮助我解决这个难题吗


提前感谢您的帮助或提示

使用Spring和JPA,我不能像其他人建议的那样扩展Hibernate Sql方言类,不过,如果使用Hibernate cfg,这是一个很好的解决方案。我的思路是正确的,但您必须记住不要将varbinary限制为navarchar的继承长度,即nvarchar(30)

返回整个编码字符串。最后,我试着解码UTF-8,虽然这主要是尝试和错误,但varbinary在UTF-16中编码

s = new String(bytes, "UTF-16LE");

使用Spring和JPA,我无法像其他人建议的那样扩展Hibernate Sql方言类,不过,如果您使用Hibernate cfg,这是一个很好的解决方案。我的思路是正确的,但您必须记住不要将varbinary限制为navarchar的继承长度,即nvarchar(30)

返回整个编码字符串。最后,我试着解码UTF-8,虽然这主要是尝试和错误,但varbinary在UTF-16中编码

s = new String(bytes, "UTF-16LE");

您确定文本以UTF-8编码存储在varbinary字段中吗?如果要将varbinary字段转换为“Tile”,那么“Tile”是什么类型?0x4761626520697320417765736F6D65在UTF-8中对我来说不像“D e s i g n…”。第一个小写字母“e”位于字节索引3处。0x47是大写G,而不是大写D。title字段最初是数据库表上的Nvarchar,但是hibernate不会从存储过程映射Nvarchar数据类型,因此在存储过程中,我将其转换为Varbinary。我发布了一个二进制示例,这是实际的:0x440065007300690067006E00200002600200050006C0061006E006E006900我不确定如何从0x440065开始。。。进入0x476162。。。这些似乎并不平等,即使在转换之后。你不能返回原始的varbinary,然后直接在Java中将其解析为UCS-2/UTF-16吗?我删除了第一个示例varbinary,实际是:Convert(varbinary,Tile)作为标题编码为:0x440065007300690067006E00200002600200050006C0061006E006E006900,当标题为Design&Planning Director.Roger时。在Java中,是否不可能只提取原始varbinary并从UCS-2/UTF-16进行转换?为什么要在数据库中转换,而我仍然不知道“Tile”是什么数据类型-我假设它是用户定义的?您确定文本以UTF-8编码存储在varbinary字段中吗?如果要将varbinary字段转换为“Tile”,那么“Tile”是什么类型?0x4761626520697320417765736F6D65在UTF-8中对我来说不像“D e s i g n…”。第一个小写字母“e”位于字节索引3处。0x47是大写G,而不是大写D。title字段最初是数据库表上的Nvarchar,但是hibernate不会从存储过程映射Nvarchar数据类型,因此在存储过程中,我将其转换为Varbinary。我发布了一个二进制示例,这是实际的:0x440065007300690067006E00200002600200050006C0061006E006E006900我不确定如何从0x440065开始。。。进入0x476162。。。这些似乎并不平等,即使在转换之后。你不能返回原始的varbinary,然后直接在Java中将其解析为UCS-2/UTF-16吗?我删除了第一个示例varbinary,实际是:Convert(varbinary,Tile)作为标题编码为:0x440065007300690067006E00200002600200050006C0061006E006E006900,当标题为Design&Planning Director.Roger时。在Java中,是否不可能只提取原始varbinary并从UCS-2/UTF-16进行转换?为什么要在数据库中转换,而我仍然不知道“Tile”是什么数据类型——我假设它是用户定义的?
s = new String(bytes, "UTF-16LE");