【发布时间】:2009-09-09 15:01:56
【问题描述】:
我有一个 Java 应用程序对通过网络接收的 UTF-8 编码的 String 进行解码,并将其保存到我的数据库 (SQL Server 2000) 中的 varchar 列中。我正在使用 JDBC 的CallableStatement 保存记录(调用setString 方法来设置此列的参数)。
我看到的问题是一个特定的String 已写入包含 ASCII 值 0 (NUL)。这表明 SQL 服务器不能表示特定的 Unicode 字符,而 JDBC 驱动程序已决定用 ASCII 值 0 替换,尽管我可能错了。
- 还有其他人遇到过这个问题吗?
- 在这种情况下,我可以使用一种机制来导致
CallableStatement调用失败吗?
理想情况下,我想保证数据已完全按照指定保存,否则“快速失败”。
我的数据库字符集是Latin1_General_AS_CS。
提前致谢。
【问题讨论】:
-
您使用的是哪个 JDBC 驱动程序?不要使用微软的,使用 jTDS 或其他的。
-
我正在使用微软自己的驱动程序。我可能会改变它,但目前不想冒任何连锁反应的风险。
-
老实说,从微软的驱动程序更改是我尝试的第一件事 - 它的名声很差 - 我们在生产系统中使用 jTDS。
标签: java sql-server jdbc