oracle编码是us7ascii 怎么办

Azrael99999 2013-05-28 05:07:08
情况是这样的,我们项目数据库一般都用UTF-8 的
现在 有个项目数据库编码换成了 us7ascii
就导致我们系统的编码都出现了问题
请教各位大神,碰到这种情况你们怎么办的
开发语言是JAVA
...全文
881 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010751971 2014-08-22
  • 打赏
  • 举报
回复
最后是怎么解决的 能告诉一下吗 谢谢
Swear_fling 2013-06-20
  • 打赏
  • 举报
回复
请问你是怎么解决这个问题的?
Azrael99999 2013-05-31
  • 打赏
  • 举报
回复
引用 11 楼 sych888 的回复:
最好调整数据库编码
我也想换啊 ,但是 肯定换不了。我所能想到的只有 重写 GET SET 了
sych888 2013-05-30
  • 打赏
  • 举报
回复
最好调整数据库编码
Azrael99999 2013-05-29
  • 打赏
  • 举报
回复
问题是 ORACLE 里面好像 不提供 设置字符集的属性,而且属性不能直接在url中增加 。是否有其他解决办法
vanjayhsu 2013-05-29
  • 打赏
  • 举报
回复
jdbc好像可以设置字符集的吧。。。不太记得了。反正数据库里面不乱码,你的程序显示应该就没问题吧
Azrael99999 2013-05-29
  • 打赏
  • 举报
回复
try
		{
			Class.forName("oracle.jdbc.driver.OracleDriver");
		}
		catch (ClassNotFoundException e1)
		{
			e1.printStackTrace();
		}
		Connection connection = null;
		try
		{
		
			connection = DriverManager
					.getConnection("jdbc:oracle:thin:@192.168.1.147:1521:orcl",
							"dbo", "sql2k");
			String sql = "select * from item where id=125";
			PreparedStatement ps = connection.prepareStatement(sql);
			ResultSet rs = ps.executeQuery();
			while (rs.next())
			{
				String name =rs.getString("name");
				String[] namearray = name.split("\\\\");
				String result = "";
				if (namearray != null && namearray.length > 0)
				{
					for (String str : namearray)
					{
						if (str != null && !"".equals(str.trim()))
						{
							int sum=0;
							if (str.length() <= 4)// 英文字符
							{
								str=str.substring(1);
								sum+=Integer.parseInt(str, 16);
								result+=Character.toString((char)sum);
							}
							else
							{// 中文字符
								result += decodeUnicode("\\" + str);
							}

						}
					}
				}

				System.out.println(result);
			}
		}
		catch (Exception e1)
		{
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
Azrael99999 2013-05-29
  • 打赏
  • 举报
回复
因为他是 另一种编码,我用的是 JDBC配置成的 数据库连接 测试的 时候 拿出来的 就都是 另一种编码 不是中文的 我前台不转码 没法显示?
vanjayhsu 2013-05-29
  • 打赏
  • 举报
回复
数据导入已经搞定了,那应该不会乱码了,为什么现有系统去跑,拿出来的时候会乱码呢?
Azrael99999 2013-05-29
  • 打赏
  • 举报
回复
数据的导入 我们已经搞定了 现在问题是,我们现有系统去跑 拿出来的时候就是 其他编码的东西 到前台就都是乱码了 我想到的 办法只有重写所有的 GET SET 方法,然后 加一层 编码转换。 但这样改的东西好多,有没有 更好的办法
vanjayhsu 2013-05-29
  • 打赏
  • 举报
回复
可以通过IMP/EXP方式导入数据看看会不会乱码。。。
Azrael99999 2013-05-29
  • 打赏
  • 举报
回复
引用 1 楼 vanjayhsu 的回复:
换字符集?你们是做接口还是换数据库还是什么其他的操作?
数据库的 字符集 肯定不能换的 换数据库 操作 就是我们系统 整个切换到 oracle us7ascii上面
Azrael99999 2013-05-29
  • 打赏
  • 举报
回复
有没有 好的解决办法 我只想到 重写 GET SET 方法
vanjayhsu 2013-05-28
  • 打赏
  • 举报
回复
换字符集?你们是做接口还是换数据库还是什么其他的操作?
由于历史的原因,早期的oracle没有中文字符集(如oracle6、oracle7、oracle7.1),但有的用户从那时起就使用数据库了, 并用US7ASCII字符集存储了中文,或是有的用户在创建数据库时,不考虑清楚,随意选择一个默认的字符集,如WE8ISO8859P1或US7ASCII,而这两个字符集都没有汉字编码,虽然有些时候选用这种字符集好象也能正常使用,但用这种字符集存储汉字信息从原则上说就是错误的,它会给数据库的使用与维护带来一系列的麻烦。正常情况下,要将汉字存入数据库,数据库字符集必须支持中文,而将数据库字符集设置为US7ASCII等单字节字符集是不合适的。US7ASCII字符集只定义了128个符号,并不支持汉字。另外,如果在SQL*PLUS中能够输入中文,操作系统缺省应该是支持中文的,但如果在NLS_LANG中的字符集设置为US7ASCII,显然也是不正确的,它没有反映客户端的实际情况。但在实际应用中汉字显示却是正确的,这主要是因为Oracle检查数据库与客户端的字符集设置是同样的,那么数据在客户与数据库之间的存取过程中将不发生任何转换,但是这实际上导致了数据库标识的字符集与实际存入的内容是不相符的。而在SELECT的过程中,Oracle同样检查发现数据库与客户端的字符集设置是相同的,所以它也将存入的内容原封不动地传送到客户端,而客户端操作系统识别出这是汉字编码所以能够正确显示。

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧