【发布时间】:2011-04-04 06:05:48
【问题描述】:
我有一个使用 MS SQL Server 2005 作为 DBMS 和 jTDS 作为 JDBC 驱动程序的应用程序。所有存储文本的列都是 VARCHAR 类型。为驱动程序指定了sendStringParametersAsUnicode=false 参数,以防止它以 unicode 形式发送所有字符串(这将导致索引扫描而不是索引列的索引查找,从而严重损害性能)。
现在我需要在数据库中存储 Unicode 文本。我的问题是,如果我只是将列类型更改为 NVARCHAR,Hibernate 仍然会向 DB 发送一个非 Unicode 字符串(没有 N 前缀),并且由于上述参数,驱动程序不会将其更改为 Unicode。显而易见的解决方案是将所有文本列更改为 NVARCHAR 并删除参数。但是,我有近 100 个文本列,因此一次更改所有文本非常困难,我想逐列进行更改。此外,有些列理想情况下应该保留 CHAR 或 VARCHAR,因为永远不会向它们写入 Unicode 文本。
那么,有没有一种方法可以告诉 Hibernate 发送带有 N 前缀的某些列的值,而不会影响仍在使用 VARCHAR 的其他列?据我了解,这应该可以解决问题。或者如果您能提出一些其他方法来处理这个问题,我们也将不胜感激。
编辑:最后,我选择将所有文本列更改为 NCHAR 或 NVARCHAR。有趣的是,数据库的大小增长到原来大小的两倍多。我不知道这怎么可能,但我想我必须忍受它。
【问题讨论】:
-
carlos,这可能是使用错误的协议来启动这样一个旧线程,但我正在处理使用 Java 前端和休眠的 UTF-8 的 sql 服务器。解决问题所需要做的就是更改列类型吗?您是否需要如上所述更改驱动程序/驱动程序配置?感谢您的帮助
-
@akaphenom 我不得不删除 sendStringParametersAsUnicode 参数,但仅此而已。
标签: sql-server hibernate unicode