gpt4 book ai didi

java - hibernate 和 MS sql server 的性能很慢

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:31 27 4
gpt4 key购买 nike

我正在使用 hibernate,数据库是 sqlserver。SQL Server 将支持 Unicode 的数据类型与仅支持 ASCII 的数据类型区分开来。例如,支持 Unicode 的字符数据类型是 nchar、nvarchar 和 longnvarchar,其中它们的 ASCII 计数器部分分别是 char、varchar 和 longvarchar。默认情况下,所有微软的 JDBC 驱动程序都将 Unicode 格式的字符串发送给 SQL Server,而不管 SQL Server 中定义的相应列的数据类型是否支持 Unicode。在列的数据类型支持Unicode的情况下,一切顺利。但是,在列的数据类型不支持 Unicode 的情况下,会出现严重的性能问题,尤其是在数据提取期间。在进行比较之前,SQL Server 尝试将表中的非 unicode 数据类型转换为 unicode 数据类型。此外,如果索引存在于非 unicode 列上,它将被忽略。这最终会导致在数据获取期间扫描整个表,从而大大减慢搜索查询的速度。

我们使用的解决方案是,我们认为有一个名为 sendStringParametersAsUnicode 的属性可以帮助摆脱这种 unicode 转换。此属性默认为“true”,这使得 JDBC 驱动程序默认将 Unicode 格式的每个字符串发送到数据库。我们关闭了这个属性。

我的问题是现在我们不能在 unicode 转换中发送数据。将来如果 varchar 的 db 列更改为 nvarchar(只有一列而不是所有 varchar 列),现在我们应该以 unicode 格式发送字符串。

请建议我如何处理这种情况。

谢谢。

最佳答案

您需要在连接字符串 url 中指定属性:sendStringParametersAsUnicode=false。

jdbc:sqlserver://localhost:1433;databaseName=mydb;sendStringParametersAsUnicode=false

关于java - hibernate 和 MS sql server 的性能很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6545424/

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