【发布时间】:2015-08-09 06:38:50
【问题描述】:
我有一个 SQL Server 2012 数据库,其中一个表包含 2 列 UTF-8 数据(非英语。具体为泰米尔语)。我为这些列设置的数据类型是 nvarchar(500)。我从 jsp 页面(输入类型为文本)获取输入(UTF-8 数据)。我可以成功地将那个文本框的值插入到sql server中,但是当我去查看值时,它是这样的“...1;”我还确保在列值之前添加 N。代码如下:
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 格式 - 这是代码:
BookName = new String(BookName.getBytes("ISO-8859-1"),"UTF-8");
AuthorName = new String(AuthorName.getBytes("ISO-8859-1"),"UTF-8");
在 Body 标签下,我还有以下内容:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
我仍然在数据库中得到特殊字符,而不是实际数据。我怎样才能做到这一点?
编辑:为了记录,如果我直接在 SQL Server 中插入数据,它工作得很好。这是查询:
select BookName, Author from tam_hist where bookname like N'%தமிழ்%'
结果:தண்ணீர்
【问题讨论】:
-
您是否检查过您的 SQL Server 使用的排序规则? msdn.microsoft.com/en-us/library/ms144250%28v=sql.105%29.aspx
-
如何检查我的 SQL Server 使用的是哪个排序规则?有什么疑问吗?
-
我使用了这个查询并在我的数据库中找到了 75 行。 SELECT * FROM sys.fn_helpcollations() WHERE name LIKE 'SQL%';
-
您可以使用以下查询检查您的排序规则:
SELECT CONVERT (varchar, SERVERPROPERTY('collation')); -
这是输出:SQL_Latin1_General_CP1_CI_AS
标签: javascript sql-server utf-8