有什么不一样吗? CREATE TABLE students ( id NUMBER(5) PRIMARY KEY, first_name VARCHAR2(20), last_name VARCHAR2(20), major VARCHAR2(30), current_credits NUMBER(3) );INSERT INTO students (id, first_name, last_name, major, current_credits) VALUES (student_sequence.NEXTVAL, 'leming', 'mao', '计算机科学', 11);select *from students;-------->应该显示的汉字却是“?”!
把 major 改为NVARCHAR2(30)试试呢?
1、修改server端字符集(不建议使用)在oracle 8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但oracle8之后,至少有三张系 统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:$sqlplus /nologSQL>conn / as sysdba; 若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服 务器,然后执行以下命令:SQL>STARTUP MOUNT;SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;SQL>ALTER DATABASE OPEN;SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;SQL>SHUTDOWN IMMEDIATE;SQL>STARTUP注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,(切记设定的字符集必须是ORACLE支持, 不然不能start) 按上面的做法就可以,但是可能会出现‘ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when NCLOB data exists’ 这样的提示信息要解决这个问题有两种方法一个是,利用INTERNAL_USE 关键字修改区域设置,还有一个是利用re-create,但是re-create有点复杂,所以请用internal_use,SQL>SHUTDOWN IMMEDIATE;SQL>STARTUP MOUNT EXCLUSIVE;SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;SQL>ALTER DATABASE OPEN;SQL>alter database national character set internal_use utf8;SQL>alter database character set internal_use zhs16gbk;SQL>SHUTDOWN immediate;SQL>startup;如果按上面的做法做,National charset的区域设置就没有问题2、修改dmp文件字符集上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘骗’过oracle的检查。 这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集, 如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp文件,所以影响不大。具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码: SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;0354然后将dmp文件的2、3字节修改为0354即可。如果dmp文件很大,用ue无法打开,就需要用程序的方法了1.操作系统认证:即oracle认为操作系统用户是可靠的,即既然能登陆到操作系统那么oracle数据库你也能登陆 2.口令文件认证:oracle认证认为操作系统用户是不可信任的,如果要访问数据库,必须进行再次认证。具体实现如下: 1.操作系统认证: 配置sqlnet.ora文件中的参数:SQLNET.AUTHENTICATION_SERVICES=(NTS) spfile(pfile)文件参数:REMOTE_LOGIN_PASSWORDFILE=('NONE') 这个时候,只要你登陆操作系统oracle用户后,就可以直接conn /as sysdba登陆数据库了。但是不能通过oracle的client去 直接连接/as sysdba。如客户端SQLPLUSw或者其它客户端软件直接conn /as sysbd 。2.口令文件认证: 配置sqlnet.ora文件中的参数:SQLNET.AUTHENTICATION_SERVICES=(NONE) spfile(pfile)文件参数: REMOTE_LOGIN_PASSWORDFILE=('EXCLUSIVE')或('SHARED') 这个时候需要配置口令文件PWDorcl.ora。(orcl为数据库SID)可以通过orapwd命令进行配置口令, 具体用法man orapwd。 这种情况下,就是口令认证模式,不能使用本地用户conn /as sysdba 这个时候会报错:ORA-01031 权限不足。 你必须使用conn sys/pwd@orcl as sysdba进行登陆:就是说必须提供用户名和密码才能登陆。(orcl 为SID)
1、修改server端字符集(不建议使用)在oracle 8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但oracle8之后,至少有三张系 统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:$sqlplus /nologSQL>conn / as sysdba; 若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服 务器,然后执行以下命令:SQL>STARTUP MOUNT;SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;SQL>ALTER DATABASE OPEN;SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;SQL>SHUTDOWN IMMEDIATE;SQL>STARTUP注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,(切记设定的字符集必须是ORACLE支持, 不然不能start) 按上面的做法就可以,但是可能会出现‘ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when NCLOB data exists’ 这样的提示信息要解决这个问题有两种方法一个是,利用INTERNAL_USE 关键字修改区域设置,还有一个是利用re-create,但是re-create有点复杂,所以请用internal_use,SQL>SHUTDOWN IMMEDIATE;SQL>STARTUP MOUNT EXCLUSIVE;SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;SQL>ALTER DATABASE OPEN;SQL>alter database national character set internal_use utf8;SQL>alter database character set internal_use zhs16gbk;SQL>SHUTDOWN immediate;SQL>startup;如果按上面的做法做,National charset的区域设置就没有问题2、修改dmp文件字符集上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘骗’过oracle的检查。 这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集, 如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp文件,所以影响不大。具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码: SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;0354然后将dmp文件的2、3字节修改为0354即可。如果dmp文件很大,用ue无法打开,就需要用程序的方法了1.操作系统认证:即oracle认为操作系统用户是可靠的,即既然能登陆到操作系统那么oracle数据库你也能登陆 2.口令文件认证:oracle认证认为操作系统用户是不可信任的,如果要访问数据库,必须进行再次认证。具体实现如下: 1.操作系统认证: 配置sqlnet.ora文件中的参数:SQLNET.AUTHENTICATION_SERVICES=(NTS) spfile(pfile)文件参数:REMOTE_LOGIN_PASSWORDFILE=('NONE') 这个时候,只要你登陆操作系统oracle用户后,就可以直接conn /as sysdba登陆数据库了。但是不能通过oracle的client去 直接连接/as sysdba。如客户端SQLPLUSw或者其它客户端软件直接conn /as sysbd 。2.口令文件认证: 配置sqlnet.ora文件中的参数:SQLNET.AUTHENTICATION_SERVICES=(NONE) spfile(pfile)文件参数: REMOTE_LOGIN_PASSWORDFILE=('EXCLUSIVE')或('SHARED') 这个时候需要配置口令文件PWDorcl.ora。(orcl为数据库SID)可以通过orapwd命令进行配置口令, 具体用法man orapwd。 这种情况下,就是口令认证模式,不能使用本地用户conn /as sysdba 这个时候会报错:ORA-01031 权限不足。 你必须使用conn sys/pwd@orcl as sysdba进行登陆:就是说必须提供用户名和密码才能登陆。(orcl 为SID)
可以看到我的相关设置是:LANG=zh_CN.GBK
NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"2.设置本地客户端编码:进入 我的电脑,属性,高级,环境变量,添加2项:LANG=zh_CN.GBK
NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"如图:
3.重新连接sqlplus,查看数据:显示正常.4.PL/SQL Developer设置并重新连接:在pl/sql developer的菜单->tools->preferences->user interface->fonts 中修改为中文字体重新连接显示正常.OK!
CREATE TABLE students (
id NUMBER(5) PRIMARY KEY,
first_name VARCHAR2(20),
last_name VARCHAR2(20),
major VARCHAR2(30),
current_credits NUMBER(3)
);INSERT INTO students (id, first_name, last_name, major,
current_credits)
VALUES (student_sequence.NEXTVAL, 'leming', 'mao',
'计算机科学', 11);select *from students;-------->应该显示的汉字却是“?”!
统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:$sqlplus /nologSQL>conn / as sysdba; 若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服
务器,然后执行以下命令:SQL>STARTUP MOUNT;SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;SQL>ALTER DATABASE OPEN;SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;SQL>SHUTDOWN IMMEDIATE;SQL>STARTUP注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,(切记设定的字符集必须是ORACLE支持,
不然不能start)
按上面的做法就可以,但是可能会出现‘ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when NCLOB data exists’
这样的提示信息要解决这个问题有两种方法一个是,利用INTERNAL_USE 关键字修改区域设置,还有一个是利用re-create,但是re-create有点复杂,所以请用internal_use,SQL>SHUTDOWN IMMEDIATE;SQL>STARTUP MOUNT EXCLUSIVE;SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;SQL>ALTER DATABASE OPEN;SQL>alter database national character set internal_use utf8;SQL>alter database character set internal_use zhs16gbk;SQL>SHUTDOWN immediate;SQL>startup;如果按上面的做法做,National charset的区域设置就没有问题2、修改dmp文件字符集上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘骗’过oracle的检查。
这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,
如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp文件,所以影响不大。具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:
SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;0354然后将dmp文件的2、3字节修改为0354即可。如果dmp文件很大,用ue无法打开,就需要用程序的方法了1.操作系统认证:即oracle认为操作系统用户是可靠的,即既然能登陆到操作系统那么oracle数据库你也能登陆
2.口令文件认证:oracle认证认为操作系统用户是不可信任的,如果要访问数据库,必须进行再次认证。具体实现如下:
1.操作系统认证:
配置sqlnet.ora文件中的参数:SQLNET.AUTHENTICATION_SERVICES=(NTS)
spfile(pfile)文件参数:REMOTE_LOGIN_PASSWORDFILE=('NONE')
这个时候,只要你登陆操作系统oracle用户后,就可以直接conn /as sysdba登陆数据库了。但是不能通过oracle的client去
直接连接/as sysdba。如客户端SQLPLUSw或者其它客户端软件直接conn /as sysbd 。2.口令文件认证:
配置sqlnet.ora文件中的参数:SQLNET.AUTHENTICATION_SERVICES=(NONE)
spfile(pfile)文件参数: REMOTE_LOGIN_PASSWORDFILE=('EXCLUSIVE')或('SHARED')
这个时候需要配置口令文件PWDorcl.ora。(orcl为数据库SID)可以通过orapwd命令进行配置口令,
具体用法man orapwd。
这种情况下,就是口令认证模式,不能使用本地用户conn /as sysdba 这个时候会报错:ORA-01031 权限不足。
你必须使用conn sys/pwd@orcl as sysdba进行登陆:就是说必须提供用户名和密码才能登陆。(orcl 为SID)
统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:$sqlplus /nologSQL>conn / as sysdba; 若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服
务器,然后执行以下命令:SQL>STARTUP MOUNT;SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;SQL>ALTER DATABASE OPEN;SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;SQL>SHUTDOWN IMMEDIATE;SQL>STARTUP注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,(切记设定的字符集必须是ORACLE支持,
不然不能start)
按上面的做法就可以,但是可能会出现‘ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when NCLOB data exists’
这样的提示信息要解决这个问题有两种方法一个是,利用INTERNAL_USE 关键字修改区域设置,还有一个是利用re-create,但是re-create有点复杂,所以请用internal_use,SQL>SHUTDOWN IMMEDIATE;SQL>STARTUP MOUNT EXCLUSIVE;SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;SQL>ALTER DATABASE OPEN;SQL>alter database national character set internal_use utf8;SQL>alter database character set internal_use zhs16gbk;SQL>SHUTDOWN immediate;SQL>startup;如果按上面的做法做,National charset的区域设置就没有问题2、修改dmp文件字符集上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘骗’过oracle的检查。
这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,
如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp文件,所以影响不大。具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:
SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;0354然后将dmp文件的2、3字节修改为0354即可。如果dmp文件很大,用ue无法打开,就需要用程序的方法了1.操作系统认证:即oracle认为操作系统用户是可靠的,即既然能登陆到操作系统那么oracle数据库你也能登陆
2.口令文件认证:oracle认证认为操作系统用户是不可信任的,如果要访问数据库,必须进行再次认证。具体实现如下:
1.操作系统认证:
配置sqlnet.ora文件中的参数:SQLNET.AUTHENTICATION_SERVICES=(NTS)
spfile(pfile)文件参数:REMOTE_LOGIN_PASSWORDFILE=('NONE')
这个时候,只要你登陆操作系统oracle用户后,就可以直接conn /as sysdba登陆数据库了。但是不能通过oracle的client去
直接连接/as sysdba。如客户端SQLPLUSw或者其它客户端软件直接conn /as sysbd 。2.口令文件认证:
配置sqlnet.ora文件中的参数:SQLNET.AUTHENTICATION_SERVICES=(NONE)
spfile(pfile)文件参数: REMOTE_LOGIN_PASSWORDFILE=('EXCLUSIVE')或('SHARED')
这个时候需要配置口令文件PWDorcl.ora。(orcl为数据库SID)可以通过orapwd命令进行配置口令,
具体用法man orapwd。
这种情况下,就是口令认证模式,不能使用本地用户conn /as sysdba 这个时候会报错:ORA-01031 权限不足。
你必须使用conn sys/pwd@orcl as sysdba进行登陆:就是说必须提供用户名和密码才能登陆。(orcl 为SID)