gpt4 book ai didi

sql - 让 Hibernate 绑定(bind)参数类型 "char(1)"而不是 "nvarchar(4000)"?

转载 作者:行者123 更新时间:2023-12-05 05:27:00 25 4
gpt4 key购买 nike

数据库端:SQL Server 2012。数据列为char(1)数据类型。

ORM: hibernate

意图:Hibernate Query 可以正确绑定(bind)参数,因此查询中没有隐式数据类型转换。

//not working as I intend. DB side still sees nvarchar(4000) 
Query.setCharacter("paramName", myChar)

Query.setParameter("paramName", myChar, Hibernate.Type.CHARACTER)

Query.setString("paramName", myCharStr)

以上变体均无效。 SQL Server Profiler 指示绑定(bind)参数类型为 navarchar(4000)。 SQL Server 在运行查询时最终会进行一些隐式数据类型转换,这打乱了我的一些初衷。 ( Rare and elusive deadlocks (select for update; then update) in case of multiple concurrent transactions )

我还注意到 JDBC PreparedStatement API 甚至没有“setCharacter()”。不确定这是否意味着什么。 ( http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html )

有没有办法实现绑定(bind)固定长度的char而不是nvarchar的意图?

最佳答案

其实不是Hibernate的问题。相反,在这个特定的数据库列上设置的排序规则不同于数据库排序规则。一旦此数据列上的排序规则得到修复,则上述任何 Hibernate 方法变体都可以绑定(bind)正确的参数类型。以防其他人遇到类似问题。

编辑:另一个重要的设置是“sendStringParametersAsUnicode”。 SQL Server JDBC 驱动程序默认发送字符为“nvarchar”或“nchar”,除非您在连接字符串中附加“sendStringParametersAsUnicode=false”;

http://technet.microsoft.com/en-us/library/ms378988.aspx http://blogs.msdn.com/b/sqlcat/archive/2010/04/05/character-data-type-conversion-when-using-sql-server-jdbc-drivers.aspx

关于sql - 让 Hibernate 绑定(bind)参数类型 "char(1)"而不是 "nvarchar(4000)"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22516608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com