关于javascript:将UTF-8数据插入SQL Server 2012

Inserting UTF-8 data into SQL Server 2012

我有一个SQL Server 2012数据库,其中一个表包含2列UTF-8数据(非英语)。泰米尔语要具体)。我为这些列设置的数据类型是nvarchar(500)。我从JSP页面(输入类型为文本)获得输入(UTF-8数据)。我可以成功地将该文本框的值插入到SQL Server中,但当我查看该值时,它是这样的"&;2…1";我还确保在列值之前添加n。代码如下:

1
2
3
4
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = java.sql.DriverManager.getConnection(url, id, pass);

String addbks ="insert into something.dbo." + Table +" (ID, BookName, Author, Owner, OwnerEmpID, Status, Reservation, Genre, StatusID) values (NEXT VALUE FOR" + Seq +", N'" + BookName +"', N'" + AuthorName +"', '" + Name +"', '" + user2 +"', 'Available', NULL, '" + Genre +"', '1')";

其中bookname和authorname是我们讨论的两列。我还将bookname和authorname转换为utf-8格式-代码如下:

1
2
BookName = new String(BookName.getBytes("ISO-8859-1"),"UTF-8");
AuthorName = new String(AuthorName.getBytes("ISO-8859-1"),"UTF-8");

在身体标签下面,我还有以下内容:

1
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

我仍然在数据库中得到特殊字符,而不是实际数据。我怎么能做到?

编辑:对于记录,如果我直接在SQL Server中插入数据,它就可以正常工作。以下是问题:

1
select BookName, Author from tam_hist where bookname like N'%?????%'

结果:&2980;&2979;&3021;&2979;&3008;&2992;&3021;


因此,在我们在评论部分进行了简短的讨论之后,我了解到您的协作需要在表中进行更改,这是执行此操作的潜在查询:

1
2
ALTER TABLE tam_hist
ALTER COLUMN bookname NVARCHAR(500) COLLATE Indic_General_90_BIN;

我按照这个网站上的建议使用这个排序规则。

如果您需要/希望更改整个数据库的排序规则,而不是特定列的排序规则,请阅读此链接。

这是对您的问题的基本复制:

1
2
3
4
5
6
7
8
DECLARE @Test TABLE ( bookName NVARCHAR(500) COLLATE Indic_General_90_BIN)

INSERT INTO @Test (bookName)
VALUES (N'?????')

SELECT *
FROM @Test
WHERE bookName LIKE N'%?????%'

对我来说,它返回预期的结果。也许您的SQL语句有问题?正如我看到的,您正在连接字符串以创建查询,也许使用perpared语句可以解决您的问题?