VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4129|回复: 15

oracle里,我无法insert进去中文

[复制链接]

1

主题

7

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-2-24 11:30:01 | 显示全部楼层 |阅读模式
插入记录后中文就变成了乱码。
(无论是用程序还是用oracle客户端编辑工具都是一样)
我是oracle新手,谢谢帮助
回复

使用道具 举报

0

主题

71

帖子

50.00

积分

新手上路

Rank: 1

积分
50.00
发表于 2020-5-8 21:15:01 | 显示全部楼层
什么平台上?
回复

使用道具 举报

0

主题

8

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-5-8 22:45:01 | 显示全部楼层
字符集的问题 你的客户端是什么字符集,支不支持中文
服务器是什么字符集  支持不支持中文  两个字符集相不相同
回复

使用道具 举报

1

主题

7

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-5-9 00:30:01 | 显示全部楼层
server是在linux上,客户端在windows上。谢谢你
回复

使用道具 举报

0

主题

71

帖子

50.00

积分

新手上路

Rank: 1

积分
50.00
发表于 2020-5-9 08:45:01 | 显示全部楼层
若是windows平台的

数据库中执行:
SELECT   *   FROM   V$NLS_PARAMETERS;


將客户端注冊表ORACLE中﹐NLS_LANG的值改成先前查找出的NLS_LANGUAGE.NLS_CHARACTERSET
回复

使用道具 举报

0

主题

71

帖子

50.00

积分

新手上路

Rank: 1

积分
50.00
发表于 2020-5-9 10:30:01 | 显示全部楼层
就是说server端和客户端的字符集必须一致,才不会有乱码
回复

使用道具 举报

1

主题

7

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-5-9 15:15:01 | 显示全部楼层
我怎么在linux上看oracle是用的什么字符集呀,能不能给出命令行?
回复

使用道具 举报

0

主题

13

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-5-9 19:15:01 | 显示全部楼层
首先需要确定你的Oracle的字符集是什么,如果你的Oracle的字符集不支持中文,以后显示的时候会乱码.
在Java中的解决办法:
将中文转码成ISO再保存,显示时再从ISO转成GBK,就不会有问题了.

转码的java方法如下:
        public static String ISO2GB(String isoStr)
        {
                if (isoStr == null)
                        return null;

                String gbStr = "";
                try
                {
                        gbStr = new String(isoStr.getBytes("ISO_8859_1"), "GBK");
                }
                catch(Exception e)
                {
                        System.out.println(e);
                }
                return gbStr;
        }
   


        public static String GB2ISO(String gbStr)
        {
                if (gbStr == null)
                        return null;

                String isoStr = "";
                try
                {
                        isoStr = new String(gbStr.getBytes("GBK"), "ISO_8859_1");
                }
                catch(Exception e)
                {
                        System.out.println(e);
                }
                return isoStr;
        }
回复

使用道具 举报

1

主题

7

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-5-9 21:30:01 | 显示全部楼层
我运行SELECT   *   FROM   V$NLS_PARAMETERS;之后显示:

NLS_LANGUAGE=SIMPLIFIED CHINESE
NLS_CHARACTERSET=WE8ISO8859P1
(我感觉这两个就鸲了吧)
下来怎么办?
回复

使用道具 举报

0

主题

13

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-5-9 23:45:02 | 显示全部楼层
如果要在Oracle客户端中显示中文,需要将Client的字符集设置成Server(数据库的字符集不是系统的字符集)端的字符集或者Server端字符集的子集.具体做法参考whbilly的方案.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表