2009-09-09 8 views
1

J'ai une application Java décodant un UTF-8 codé String reçu sur le fil et l'enregistrer dans une colonne varchar dans ma base de données (SQL Server 2000). Je sauvegarde l'enregistrement en utilisant CallableStatement de JDBC (appelant la méthode setString pour définir le paramètre pour cette colonne).CallableStatement setString - Caractère (s) non pris en charge?

Le problème que je vois est qu'un String particulier a été écrit qui contient la valeur ASCII 0 (NUL). Cela me suggère que le serveur SQL ne peut pas représenter un caractère Unicode particulier et le pilote JDBC a décidé de substituer en ASCII la valeur 0, bien que je puisse me tromper.

  • Est-ce que quelqu'un d'autre a rencontré ce problème?
  • Existe-t-il un mécanisme que je peux utiliser pour provoquer l'échec de l'appel CallableStatement dans cette situation?

Idéalement, je voudrais garantir que les données ont été sauvegardées exactement comme spécifié, ou bien "fail fast".

Mon jeu de caractères de base de données est Latin1_General_AS_CS.

Merci d'avance.

+2

Quel pilote JDBC utilisez-vous? N'utilisez pas Microsoft, utilisez jTDS ou autre chose. – Rich

+0

J'utilise le propre pilote de Microsoft. Je vais probablement le changer mais je ne veux pas risquer d'avoir des effets d'entraînement pour le moment. – Adamski

+0

Pour être honnête, le changement de pilote de Microsoft est la première chose que j'essaie - il a une très mauvaise réputation - nous utilisons jTDS dans nos systèmes de production. – Rich

Répondre

1

Vous devez utiliser le type 'NVARCHAR' dans la base de données.

0

Juste un WAG, mais utiliserait .setBytes(String parameterName, byte[] x) faire un tour? Le tableau d'octets proviendrait de myString.getBytes(). Vous pouvez également essayer d'utiliser différents jeux de caractères avec getBytes().

Questions connexes