如何在 HQL 中为 Unicode 字符串 (T-SQL) 使用 "N" 前缀?

How to use the "N" prefix for Unicode strings (T-SQL) in HQL?

我有这个 MS SQL 查询:

SELECT * FROM tags_synonyms WHERE TITLE LIKE N'piece'"

如何转换为HQL?

String sql = "SELECT * FROM tags_synonyms WHERE TITLE LIKE N:piece";
query.setString("piece", "%" + piece + "%");

捕获异常:

Invalid column name 'N@P0'.

如果您使用的是 Microsoft JDBC Driver for SQL Server,那么您不必担心我们在纯 T-SQL 查询中经常看到的字符串前缀 N'。如果您的 Java 项目设置为使用 Unicode 字符串(例如,通过对 Java 源文件使用 UTF-8 编码),那么 JDBC 驱动程序将负责 N'前缀给你。

例如下面的Java代码

try (Connection con = DriverManager.getConnection(connectionUrl)) {
    try (PreparedStatement s = con.prepareStatement(
            "SELECT language FROM vocabulary WHERE phrase LIKE ?")) {
        s.setString(1, "%γιορτή%");
        try (ResultSet rs = s.executeQuery()) {
            if (rs.next()) {
                System.out.println(rs.getString("language"));
            }
        }
    }
} catch (Exception e) {
    e.printStackTrace(System.out);
}

导致以下语句被发送到 SQL 服务器(如 SQL Profiler 中所示):

exec sp_prepexec 
    @p1 output,
    N'@P0 nvarchar(4000)',
    N'SELECT language FROM vocabulary WHERE phrase LIKE @P0        ',
    N'%γιορτή%'