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语句可以解决您的问题?