Charla
先说一下问题出现的背景,我们公司有一个项目(Java),在开发的过程中,我们一直使用的是MySQL,但是,
到客户现场实施的时候,使用的是oracle,最多也就是切库,正常使用也就没有问题了,这个我们在开发环境
的时候就验证过,万万没有想到出现出现了一个很怪的字符集,us7ascii。这就导致了数据库中的所有中文都是
乱码了,整的是尴尬
Confirmar el fondo del problema
1) Confirme el juego de caracteres de la base de datos de Oracle
2) Confirme la versión de la base de datos de Oracle
3) Confirme que hay una versión del paquete jar de base de datos confusa
Resolver el problema
从上面的确认中,知道
1)数据库的版本和java环境中使用的jar版本不一致
2)字符编码有问题
1) Primero reduzca la versión del paquete de controladores de Oracle
Correspondencia entre la versión de la base de datos y el jar Se
puede ver que es necesario utilizar oracle14.jar
Ajuste la versión del jar en el archivo pom.xml
<!-- oracle 驱动 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
2) Configurar las propiedades de la conexión
Configuración de la propiedad de conexión:
connectionProperties: serverEncoding=ISO-8859-1;clientEncoding=GBK;defaultRowPrefetch=50;bigStringTryClob=true
Agregar configuración antes de la URL
jdbc:wrap-jdbc:filters=encoding:
Después de los dos pasos anteriores, se ha resuelto el problema confuso de la base de datos.
Hay otra manera
Justo después de reducir la versión de Oracle, use el método de modificar el conjunto de caracteres
String name = testMapper.getName();
System.out.println(new String(name.getBytes("ISO8859_1"), "GB2312"));
System.out.println(new String(name.getBytes("ISO8859-1"), "GB2312"));
System.out.println(new String(name.getBytes("ISO-8859-1"), "GB2312"));
System.out.println(new String(name.getBytes("ISO8859_1"), "GBK"));
System.out.println(new String(name.getBytes("ISO8859-1"), "GBK"));
System.out.println(new String(name.getBytes("ISO-8859-1"), "GBK"));
Se pueden usar todos los métodos anteriores, pero si hay mucho procesamiento de este tipo en el código, requerirá mucho esfuerzo.
Registre los problemas que surjan y tome una foto ...