Grabe una solución en el conjunto de caracteres us7ascii de la base de datos de Oracle

Charla

		先说一下问题出现的背景,我们公司有一个项目(Java),在开发的过程中,我们一直使用的是MySQL,但是,
	到客户现场实施的时候,使用的是oracle,最多也就是切库,正常使用也就没有问题了,这个我们在开发环境
	的时候就验证过,万万没有想到出现出现了一个很怪的字符集,us7ascii。这就导致了数据库中的所有中文都是
	乱码了,整的是尴尬

Confirmar el fondo del problema

1) Confirme el juego de caracteres de la base de datos de Oracle

Inserte la descripción de la imagen aquí

2) Confirme la versión de la base de datos de Oracle

Inserte la descripción de la imagen aquí

3) Confirme que hay una versión del paquete jar de base de datos confusa

Inserte la descripción de la imagen aquí

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
Inserte la descripción de la imagen aquí
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:
Inserte la descripción de la imagen aquí

   connectionProperties: serverEncoding=ISO-8859-1;clientEncoding=GBK;defaultRowPrefetch=50;bigStringTryClob=true

Agregar configuración antes de la URL
Inserte la descripción de la imagen aquí

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 ...

Supongo que te gusta

Origin blog.csdn.net/weixin_39472101/article/details/115258215
Recomendado
Clasificación