Características internacionales del controlador JDBC
Entre las características de internacionalización de Microsoft JDBC Driver para SQL Server se incluyen los elementos siguientes:
- Compatibilidad con el trabajo en los mismos idiomas que SQL Server
- Compatibilidad con las conversiones de idioma de Java para datos de SQL Server en los que el idioma sea importante
- Compatibilidad con idiomas internacionales, independientemente del sistema operativo
- Compatibilidad con nombres de dominio internacionales (a partir de Microsoft JDBC Driver 6.0 para SQL Server)
Control de datos de caracteres
Los datos de caracteres en Java se tratan de forma predeterminada como Unicode, el objeto String de Java representa datos de caracteres Unicode. En el controlador JDBC, la única excepción a esta regla son los métodos establecedor y captador de flujos ASCII, que son casos especiales porque usan flujos de bytes con la presunción implícita de páginas de códigos únicas conocidas (ASCII).
Además, el controlador JDBC proporciona la propiedad de cadena de conexión sendStringParametersAsUnicode. Esta propiedad se puede usar para especificar que los parámetros preparados para los datos de caracteres se envíen como ASCII o juego de caracteres multibyte (MBCS) en lugar de Unicode. Para obtener más información sobre la propiedad de cadena de conexión sendStringParametersAsUnicode, consulte Establecimiento de las propiedades de conexión.
Conversiones entrantes del controlador
Los datos de texto Unicode que provengan del servidor no necesitan conversión. Se pasan directamente como Unicode. Los datos que no sean Unicode y provengan del servidor se convierten de una página de códigos de datos, en el nivel de la base de datos o de columna, a Unicode. El controlador JDBC emplea las rutinas de conversión de la máquina virtual Java (JVM) para realizar estas conversiones. Estas conversiones se realizan en todos los métodos establecedores de flujos String y Character.
Si la JVM no tiene la compatibilidad adecuada de página de códigos para los datos de la base de datos, el controlador JDBC inicia una excepción "La página de códigos XXX no es compatible con el entorno Java". Para solucionar este problema, debería instalar la compatibilidad completa con caracteres internacionales necesaria para esa JVM.
Conversiones salientes del controlador
Los datos de caracteres que vayan desde el controlador hasta el servidor pueden ser ASCII o Unicode. Por ejemplo, los nuevos métodos de caracteres nacionales de JDBC 4.0 (como los métodos setNString, setNCharacterStream y setNClob de las clases SQLServerPreparedStatement y SQLServerCallableStatement) siempre envían sus valores de parámetro al servidor en formato Unicode.
Por otra parte, los métodos API de caracteres no nacionales (como los métodos setString, setCharacterStream y setClob de las clases SQLServerPreparedStatement y SQLServerCallableStatement) envían sus valores al servidor de Unicode solamente cuando la propiedad sendStringParametersAsUnicode está establecida en "true", que es el valor predeterminado.
Parámetros no Unicode
Para un rendimiento óptimo con el tipo de parámetros CHAR, VARCHAR o LONGVARCHAR que no son Unicode, configure la propiedad de cadena de conexión sendStringParametersAsUnicode en "false" y use métodos de caracteres que no sean nacionales.
Problemas de formato
En cuanto a la fecha, la hora y las divisas, el formato con datos localizados se aplica en el nivel de lenguaje Java empleando el objeto Locale y los diversos métodos de formato correspondientes a los tipos de datos Date, Calendar y Number. En el caso excepcional en el que el controlador JDBC debe pasar datos para los que el idioma sea importante en un formato localizado, se utiliza el formateador correspondiente con la configuración regional predeterminada de la JVM.
Compatibilidad con la intercalación
El controlador JDBC 3.0 admite todas las intercalaciones compatibles con SQL Server 2000 (8.x) y SQL Server 2005 (9.x), así como las nuevas intercalaciones o nuevas versiones de los nombres de intercalación de Windows que se incluyeron en SQL Server 2008 (10.0.x).
Para obtener más información sobre las intercalaciones, vea Compatibilidad con la intercalación y Unicode y Nombre de intercalación de Windows (Transact-SQL).
Usar nombres de dominio internacionales (IDN)
JDBC Driver 6.0 para SQL Server admite el uso de nombres de dominio internacionalizados (IDN) y puede convertir un nombre de servidor Unicode en codificación compatible con ASCII (Punycode) cuando sea necesario durante una conexión. Si los IDN se almacenan en el sistema de nombres de dominio (DNS) como cadenas ASCII en el formato Punycode (especificado por RFC 3490), habilite la conversión del nombre de servidor Unicode al establecer la propiedad serverNameAsACE en true. De lo contrario, si el servicio DNS está configurado para permitir el uso de caracteres Unicode, establezca la propiedad serverNameAsACE en false (valor predeterminado). En versiones anteriores del controlador JDBC, también es posible convertir el valor de serverName en Punycode mediante los métodos IDN.toASCII de Java antes de establecer la propiedad de una conexión.
Nota:
La mayoría del software de resolver escrito para plataformas distintas de Windows se basa en los estándares DNS de Internet y, por tanto, es probable que use el formato Punycode para los IDN, mientras que un servidor de DNS basado en Windows en una red privada se puede configurar para permitir el uso de caracteres UTF-8 según el servidor. Para obtener más información, vea Compatibilidad con caracteres Unicode.