【问题标题】:CallableStatement setString - Unsupported character(s)?CallableStatement setString - 不支持的字符?
【发布时间】: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


【解决方案1】:

您需要在数据库中使用“NVARCHAR”类型。

【讨论】:

    【解决方案2】:

    只是一个 WAG,但使用 .setBytes(String parameterName, byte[] x) 会耍花招吗?字节数组将来自myString.getBytes()。您可能还想尝试在 getBytes() 中使用不同的字符集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多