大家好,
我现装了oracle19g 在linux as4下,我客户端是装在widows下, 我注册表中客户端编码为:AMERICAN_AMERICA.AL32UTF8
我在linux下用plsqlplus ,用select userenv('language') from dual 查询出的数据库编码也为:AMERICAN_AMERICA.AL32UTF8
我现在linux下用insert tt(pid,code,name) values(1,'a','中文')插入数据后,在linux下和windows下plsql develop查询都可以正常显示中文值,
但如果我在windows下用plsql develop插入insert into(pid,code,name) values(2,'b','中文')插入数据后,在windows下用plsql develop查询可以查询到中文信息如下:
1 a 中文
2 b 中文
,但当查询时,plsql develop会提示如下信息:
One or more UTF8 fields contain non-UTF8 data,editing might give unexpected results,但如果我在linux下用sqlplus查询这个表,用select * from tt时,刚才在windows下插入的2,'b,'中文' 这条数据,会显示乱码,显示结果如下:
1 a 中文
2 b 涓第二条数据在windows下显示是正常的,但linux下这条数据不能正确显示。请帮一下。
谢谢!
我现装了oracle19g 在linux as4下,我客户端是装在widows下, 我注册表中客户端编码为:AMERICAN_AMERICA.AL32UTF8
我在linux下用plsqlplus ,用select userenv('language') from dual 查询出的数据库编码也为:AMERICAN_AMERICA.AL32UTF8
我现在linux下用insert tt(pid,code,name) values(1,'a','中文')插入数据后,在linux下和windows下plsql develop查询都可以正常显示中文值,
但如果我在windows下用plsql develop插入insert into(pid,code,name) values(2,'b','中文')插入数据后,在windows下用plsql develop查询可以查询到中文信息如下:
1 a 中文
2 b 中文
,但当查询时,plsql develop会提示如下信息:
One or more UTF8 fields contain non-UTF8 data,editing might give unexpected results,但如果我在linux下用sqlplus查询这个表,用select * from tt时,刚才在windows下插入的2,'b,'中文' 这条数据,会显示乱码,显示结果如下:
1 a 中文
2 b 涓第二条数据在windows下显示是正常的,但linux下这条数据不能正确显示。请帮一下。
谢谢!
试试看
我是说,你的windows所传递的数据到了linux被截断了?操作系统对该字符集解析的原因?
以上是我的个人推测,需要验证.
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8然后再查询看看.
一个或多个UTF8的域包含非UTF8的数据,编辑后可能会得到不正确的结果
是不是带空格了。你换成其他文字试试。
一是在开发时指定unicode,在操作时莫忘了N'unicode';
另一种则得看软件使用的操作系统(本地语言)还是其他语言,本地语言和数据库语言不同很可能造成乱码现象.
谢谢,我按你的设置了,export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
但是设完后,当我在linux下 conn ms/oracle 想连数据库时,提示如下错误信息,不能连接了。
ORA-12705:cannot access NLS data fiels or invalid environment specified
我在windows下执行了下面的语句,
insert into tt(pid,code,name) values(3,'c',N'中文');当我在windows下用plsql develop工具查询这个tt表时,可以显示这个中文,不会显示器“涓”这个乱码。但当我在linux下用sqlplus查询时,就会把这条记录显示成 "涓" 了。帮一下了,难道这个入门问题大家都没碰到过吗?谢谢!
select tab1.aa||'_'||tab2.bb||'.'||tab3.cc from (select VALUE$ aa from sys.props$ where name='NLS_LANGUAGE')tab1,(select VALUE$ bb from sys.props$ where name='NLS_ISO_CURRENCY')tab2,(select VALUE$ cc from sys.props$ where name='NLS_CHARACTERSET')tab3; 看是否是AMERICAN_AMERICA.AL32UTF8?
谢谢,我执行了你的sql语句,显示还是AMERICAN_AMERICA.AL32UTF8是不是linux下sqlplus客户端的编码问题,但我不知道该怎样改变它.
如果现在数据不太重要的话,换个较通用的字符集吧!update sys.props$ set value$='AMERICAN_AMERICA.US7ASCII' where name='NLS_CHARACTERSET'; 或
update sys.props$ set value$='AMERICAN_AMERICA.WE8ISO8859P1' where name='NLS_CHARACTERSET';
修改后服务器重启,并使客户端与其保持一致。再试试看。
若要改,先exp有用的数据,谨慎地修改。字符集的修改:
修改只能由子集向超集改,象下面:
US7ASCII ->WE8ISO8859P1
US7ASCII ->ZHS16GBK
US7ASCII ->UTF8
具体步骤为:
SQL> STARTUP MOUNT; --启动数据库
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE CHARACTER SET <new_character_set_name>;
SQL> SHUTDOWN IMMEDIATE; -- or NORMAL
SQL> STARTUP;