查看Oracle字符集及修改
ORACLE乱码问题解决
'UNKOWN'),
96,
DECODE(CHARSETFORM, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'),
一、修改oracle 字符集
由于Oracle 默认安装了SIMPLIFIED CHINESE_CHINA.WE8ISO8859P1字符集,不修改中文会出现乱码现象,输入如下命令:
[oracle@localhost ~]$sqlplus ‘/as sydba’
SQL>shutdown immediate
SQL>Startup restrict
SQL>select userenv('language') from dual;
SIMPLIFIED CHINESE_CHINA.WE8ISO8859P1
SQL>UPDATE sys.PROPS$ SET value$='ZHS16GBK' WHERE NAME='NLS_CHARACTERSET';
5.ALTER SYSTEM SET AQ_TM_PROCESSES=0;
6.ALTER DATABASE OPEN;
9.COL VALUE NEW_VALUE CHARSET
10.SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
1,
'VARCHAR2',
2,
'NVARCHAR2',
oracle alter set 语句的用法
Oracle Alter Set 语句的用法Oracle Alter Set 语句用于修改数据库的设置,包括数据库名称、字符集、时区、排序规则等。
Alter Set 语句可以单独使用,也可以与其他语句一起使用,如Create Database、Alter Database等。
语法ALTER SET <parameter> = <value>;其中,<parameter>是需要修改的设置,<value>是新的值。
常用参数参数描述DB_NAME 数据库名称CHARACTER SET 字符集TIME ZONE 时区SORT 排序规则NLS_DATE_FORMAT 日期格式NLS_TIMESTAMP_FORMAT 时间戳格式NLS_NUMERIC_CHARACTERS 数字字符SESSIONS 最大会话数PROCESSES 最大进程数COMMIT_WAIT 提交等待时间IDLE_TIME 空闲时间LOG_BUFFER 日志缓冲区大小OPEN_CURSORS 最大打开游标数SQL_TRACE SQL 追踪用法1. 修改数据库名称ALTER SET DB_NAME = 'new_database_name';2. 修改字符集ALTER SET CHARACTER SET = 'UTF8';3. 修改时区ALTER SET TIME ZONE = 'Asia/Shanghai';4. 修改排序规则ALTER SET SORT = 'BINARY';5. 修改日期格式ALTER SET NLS_DATE_FORMAT = 'YYYY-MM-DD';6. 修改时间戳格式ALTER SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS';7. 修改数字字符ALTER SET NLS_NUMERIC_CHARACTERS = ',.';8. 修改最大会话数ALTER SET SESSIONS = 1000;9. 修改最大进程数ALTER SET PROCESSES = 1000;10. 修改提交等待时间ALTER SET COMMIT_WAIT = 10;11. 修改空闲时间ALTER SET IDLE_TIME = 30;12. 修改日志缓冲区大小ALTER SET LOG_BUFFER = 10240;13. 修改最大打开游标数ALTER SET OPEN_CURSORS = 100;14. 修改 SQL 追踪ALTER SET SQL_TRACE = TRUE;注意•Alter Set 语句只能修改数据库的设置,不能修改表、视图、存储过程等对象的设置。
oracle导入出现字符集问题解决办法
oracle导入出现字符集问题解决办法场景:把一台linux上的oracle库的数据捣腾到一台 windows2003上的oracle库中,在捣腾的过程中乱码了!有经验的知道多半是要改windows的注册表。
注册表打开发方式:Win98/98SE/Me运行中输入regedit.exe 无权限限制Win2000/XP1.开始>>运行.中输入regedt322.开始>>运行.中输入regedit第一种方法打开的注册表编辑器和Win98下的一样,而且功能相同,而使用第二种方法打开的注册表编辑器则可以方便的设置权限,建议网络管理员使用第2种方法打开注册表编辑器修改需要修改的权限设置部分以免被他人恶意修改。
Windows Vista/71.在开始菜单搜索框中输入regedit并按回车键.(需要管理员权限)2.在运行中输入regedit.exe(需要管理员权限)1. NLS_LANG 参数组成NLS_LANG参数由以下部分组成:NLS_LANG=<language>_<territory>.<client character set>Language:指定Oracle消息使用的语言,校验,日期中月份和日显示。
Territory:指定默认日期、数字、货币等格式,地区和计算星期及日期的习惯。
Client character set:控制客户端应用程序使用的字符集例如:NLS_LANG=AMERICAN_7ASCIIAMERICAN是语言,AMERICA是地区,US7ASCII是客户端字符集通常设置或者等于客户端(如Windows)代码页或者对于unicode应用设置为UTF8在Windows上查看当前系统的代码页可以使用chcp命令:E:\>chcp活动的代码页: 936代码页936也就是中文字符集 GBK,在Microsoft的官方站点上,我们可以遭到关于936代码页的具体编码规则,请参考以下链接:/globaldev/reference/dbcs/936.htm2. 查看 NLS_LANG 的方法Windows使用:注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\NLS_LANG查看Unix使用:env|grep NLS_LANG如:/opt/oracle>env|grep NLS_LANGNLS_LANG=AMERICAN_CHINA.ZHS16GBKWindows客户端设置,可以在注册表中更改NLS_LANG,具体键值位于:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\xx指存在多个ORACLE_HOME时系统编号。
查看Oracle字符集及如何修改字符集
查看Oracle字符集及如何修改字符集文章分类:数据库一、什么是oracle字符集Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。
ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。
它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。
影响oracle数据库字符集最重要的参数是NLS_LANG参数。
它的格式如下: NLS_LANG = language_territory.charset它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。
其中:Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。
如:AMERICAN _ AMERICA. ZHS16GBK从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。
所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。
二.查看数据库字符集这涉及三方面的字符集,一是oracel server端的字符集;二是oracle client端的字符集;三是dmp文件的字符集。
在做数据导入的时候,需要这三个字符集都一致才能正确导入。
1、查询oracle server端的字符集有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:SQL>select userenv(‘language’) from dua l;结果类似如下:AMERICAN _ AMERICA. ZHS16GBK2、如何查询dmp文件的字符集用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。
如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit 打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;ZHS16GBK如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):catexp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6然后用上述SQL也可以得到它对应的字符集。
ORACLE 默认编码 GBK -UTF8编码
//查看oracle数据库字符集:select userenv('language') from dual;//命令关闭SQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.1、STARTUP NOMOUNTNONOUNT选项仅仅创建一个Oracle实例,当实例打开后,系统将显示一个SGA内存结构和大小的列表;2、STARTUP MOUNT该命令创建实例并且安装数据库,但没有打开数据库,在这种打开方式下,除了可以看到SGA 系统列表以外,系统还会给出 "数据库装载完毕 "的提示;3、STARTUP该命令完成创建实例、安装实例和打开数据库的所有三个步骤,这时系统除了可以看到前面Startup Mount方式下的所有提示外,还会给出一个 "数据库已经打开 "的提示,此时,数据库系统处于正常工作状态,可以接受用户请求。
SQL> startup mountORACLE instance started.Total System Global Area 135337420 bytesFixed Size 452044 bytesVariable Size 109051904 bytesDatabase Buffers 25165824 bytesRedo Buffers 667648 bytesDatabase mounted.SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;System altered.SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;System altered.SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;System altered.SQL> ALTER DATABASE OPEN;Database altered.SQL>alter database character set INTERNAL_USE UTF8或者SQL> alter database character set zhs16gbk2 ;alter database character set zhs16gbk*第 1 行出现错误:ORA-12716: ??? CLOB ???, ?? ALTER DATABASE CHARACTER SET alter database character set internal_convert zhs16gbk;。
修改oracle会话字符集
修改oracle会话字符集-概述说明以及解释1.引言1.1 概述概述部分是文章引言的一部分,在这部分中,我们介绍文章的主题和背景,总结讨论的目的和重要性。
下面是可以在概述部分中包含的内容:概述:Oracle是一种流行的关系数据库管理系统(RDBMS),被广泛用于许多企业和组织的数据管理和存储。
在Oracle数据库中,会话是与数据库建立的连接相关联的重要概念。
会话字符集是指用于存储和处理会话中的字符数据的编码集。
本文将讨论如何修改Oracle会话字符集。
会话字符集的选择在数据存储和处理过程中扮演着至关重要的角色。
正确选择和设置会话字符集可以确保数据的准确性和完整性,并且能够正确地处理各种字符集和语言。
在本文的正文部分,我们将首先介绍Oracle会话字符集的基本概念和操作原理。
然后,我们将深入讨论修改Oracle会话字符集的必要性,包括解释为什么有时需要修改会话字符集以满足特定的业务需求。
接下来,我们将详细阐述修改Oracle会话字符集的方法和步骤。
这包括在数据库级别和会话级别进行字符集的修改。
我们还会介绍一些常见的问题和注意事项,以帮助读者避免潜在的错误或数据损坏。
通过本文的阅读,读者将能够了解到修改Oracle会话字符集的重要性,并学习到正确设置和操作会话字符集的方法。
这将对数据库管理员和开发人员在处理多语言数据和跨国业务时具有重要意义。
总之,本文旨在为读者提供一个全面的指南,帮助他们理解和掌握修改Oracle会话字符集的技巧和方法。
通过正确设置和操作会话字符集,读者将能够更好地处理和管理Oracle数据库中的多语言数据,提高数据的质量和可靠性。
1.2文章结构文章结构部分内容:文章结构是指文中的章节安排和组织方式,它有助于读者理解文章的脉络和逻辑关系。
本文按照引言、正文和结论三个部分进行组织和阐述。
引言部分首先概述了修改Oracle会话字符集的背景和意义,介绍了文章的主要目的和内容。
接着,文章结构部分对整篇文章进行了简要的概述和分类,以帮助读者更好地掌握文章的框架。
ORACLE字符集检查工具CSSCAN
执行完之后会在 D:\下看到 css.log.err、css.log1.out 和 css.log1.txt 文件,检查
css.log1.err 文件可以看到哪些字段需要修改到多大。例如:
User : STREAM
Table : T_FONDS_INFO
Column: TERM
Type : VARCHAR2(35)
当然,也可以利用数据字典生成脚本直接修改所有表的 CHAR 类型的字段长度为原值的
3
1.5 倍,例如:
创建 spool.sql 文件,内容如下:
set heading off set feedback OFF set echo off set pages 1000 lines 120 spool d:\length.sql select 'alter table '||table_name||' modify'||'('||COLUMN_NAME||' '||data_type||'('||ro und(DATA_LENGTH*1.5)||'));' from user_tab_columns where data_type like '%CHAR%'; spool off
些表的字段长度。ORACLE 提供了 CSSCAN 工具来查看字符集转换的时候哪些字段需要增大到
多大的长度。(当然,也可以写 PL/SQL 将所有的表为 CHAR,VARCHAR2 的字段都增大 1.5 倍),
既然 ORACLE 提供了 CSSCAN 工具,我们就要学着使用。
在 我 们 创 建 数 据 库 的 时 候 , CSSCAN 工 具一 般 不 会 被 安 装 , 我们 需 要 手 动 执 行
查询数据库字符集的sql语句
查询数据库字符集的sql语句查询数据库字符集是数据库管理中的一项重要任务,通过查询数据库字符集,可以了解数据库所使用的字符编码,以便正确地操作和处理数据。
下面列举了一些查询数据库字符集的SQL语句。
1. 查询MySQL数据库字符集:```SHOW VARIABLES LIKE 'character_set_database';```这条SQL语句可以查询MySQL数据库中当前数据库的字符集。
2. 查询Oracle数据库字符集:```SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';```这条SQL语句可以查询Oracle数据库中当前数据库的字符集。
3. 查询SQL Server数据库字符集:```SELECT collation_name FROM sys.databases WHERE name = 'YourDatabaseName';这条SQL语句可以查询SQL Server数据库中指定数据库的字符集。
4. 查询PostgreSQL数据库字符集:```SELECT pg_encoding_to_char(encoding) FROM pg_database WHERE datname = 'YourDatabaseName';```这条SQL语句可以查询PostgreSQL数据库中指定数据库的字符集。
5. 查询DB2数据库字符集:```SELECT CODEPAGE FROM SYSCAT.DATABASES WHERE NAME = 'YourDatabaseName';```这条SQL语句可以查询DB2数据库中指定数据库的字符集。
6. 查询SQLite数据库字符集:```PRAGMA encoding;这条SQL语句可以查询SQLite数据库的字符集。
查oracle字符集编码
查oracle字符集编码Oracle是一种流行的关系型数据库管理系统,它支持多种字符集编码。
在处理多语言数据时,正确的字符集编码非常重要。
本文将介绍如何查看Oracle字符集编码。
1. 查看数据库字符集编码要查看Oracle数据库的字符集编码,可以使用以下SQL语句:SELECT * FROM nls_database_parameters WHEREparameter='NLS_CHARACTERSET';这将返回一个结果集,其中包含数据库的字符集编码。
2. 查看表的字符集编码要查看特定表的字符集编码,可以使用以下SQL语句:SELECT * FROM all_tab_columns WHEREtable_name='table_name' AND column_name='column_name';将“table_name”和“column_name”替换为要查询的表和列名称。
这将返回一个结果集,其中包含表的字符集编码。
3. 查看会话字符集编码要查看当前会话的字符集编码,可以使用以下SQL语句:SELECT * FROM nls_session_parameters WHEREparameter='NLS_CHARACTERSET';这将返回一个结果集,其中包含当前会话的字符集编码。
4. 修改字符集编码如果需要修改Oracle数据库的字符集编码,需要执行以下步骤:a. 停止数据库实例。
b. 备份数据库。
c. 修改数据库参数文件(init.ora或spfile)中的NLS_CHARACTERSET参数。
d. 启动数据库实例。
e. 使用ALTER DATABASE CHARACTER SET语句修改数据库中现有表和列的字符集编码。
f. 重新创建索引和约束。
g. 修改应用程序以使用新的字符集编码。
总结在处理多语言数据时,正确的字符集编码非常重要。
ORACLE参数文件的修改与配置
ORACLE参数文件的修改与配置ORACLE参数文件是一个包含了Oracle数据库系统的各种配置和设置信息的文本文件。
通过修改参数文件,可以对数据库进行各种配置和定制,以满足特定的需求和性能要求。
本文将详细介绍如何修改和配置ORACLE参数文件。
1.找到参数文件在Oracle数据库中,有两个主要的参数文件:2.修改参数文件以下是一些常见的ORACLE参数及其说明(请注意,参数名称和完整的描述可能因ORACLE版本而有所不同):-DB_BLOCK_SIZE:指定数据库块的大小,通常可能使用的数值为2KB或4KB。
较大的值可以提高数据库的性能,但会增加内存消耗。
-SHARED_POOL_SIZE:用于指定共享池的大小。
共享池用于缓存SQL语句和数据字典等共享的对象。
- SGA_TARGET和SGA_MAX_SIZE:用于设置SGA(System Global Area)的大小。
SGA是一个Oracle数据库实例的内存区域,包含了缓冲区、共享池和重做日志缓冲区等。
- PGA_AGGREGATE_TARGET:用于设置PGA(Program Global Area)的大小。
PGA是ORACLE数据库为每个连接到数据库的用户分配的内存区域,用于执行用户会话的相关操作。
-LOG_BUFFER:用于设置日志缓冲区的大小。
日志缓冲区用于缓存重做日志信息。
- TIMED_STATISTICS:指定是否启用Oracle数据库的时间统计功能。
-DIAGNOSTIC_DEST:设置数据库诊断信息的目录路径。
3.配置ORACLE参数文件在修改参数文件之前,建议先备份原始的参数文件。
修改参数文件后,需要将其重新加载到数据库中以生效。
-对于SPFILE,可以使用以下命令进行重新加载:```SQL> ALTER SYSTEM SET <parameter_name>=<new_value>SCOPE=SPFILE;```-对于PFILE,可以使用以下命令进行重新加载:```SQL> ALTER SYSTEM SET <parameter_name>=<new_value>;SQL> ALTER SYSTEM SET <parameter_name>=<new_value>SID='<sid>';```其中,<parameter_name>是要修改的参数名称,<new_value>是要设置的新值。
nls_database_parameters字符集简体中文
nls_database_parameters字符集简体中文NLS(National Language Support)数据库参数字符集简体中文,是指Oracle数据库中用于支持不同自然语言的设置。
本文将一步一步回答与NLS数据库参数字符集简体中文有关的问题,深入探讨其功能和意义。
一、什么是NLS字符集?NLS字符集是Oracle数据库中的一项功能,用于支持不同语言和字符集的处理。
在国际化和多语言环境中,NLS字符集是至关重要的,它决定了数据库如何存储和显示不同语言的字符和数据。
其中,NLS数据库参数字符集是对于数据库中数据存储和检索过程中字符集的设置。
二、为什么需要NLS数据库参数字符集?1.全球化需求:随着全球化的趋势,越来越多的企业和用户需要在数据库中存储和处理不同语言的数据。
NLS数据库参数字符集的设置可以确保数据库能够正确地存储和处理各种语言的字符。
2.字符编码问题:不同语言和字符集之间存在着编码的差异。
例如,汉字可以使用GB2312、GBK、GB18030等字符编码表示,而英文字母则使用ASCII或Unicode编码。
如果数据库不正确地处理字符编码,就会导致乱码或无法正确表示数据。
3.数据一致性:在多语言环境下,为了保持数据的一致性和准确性,必须使用适当的字符集进行数据存储和检索。
NLS数据库参数字符集的设置可以确保数据库中所有数据都采用同一字符集进行处理,避免出现数据不一致的问题。
三、如何设置NLS数据库参数字符集?在Oracle数据库中,可以通过以下步骤来设置NLS数据库参数字符集:1.检查当前字符集:可以使用以下SQL语句查询当前数据库的字符集:sqlSELECT parameter, value FROM vnls_parameters WHERE parameter IN ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');这将返回当前数据库的字符集和NCHAR字符集。
修改oracle字符集注意事项
修改oracle字符集注意事项
修改Oracle字符集是一个非常重要的操作,需要特别小心和谨慎。
在进行字符集修改时,需要注意以下几个方面:
1. 数据备份,在修改字符集之前,务必对数据库进行完整备份。
这是非常重要的,因为字符集修改可能会导致数据损坏或丢失,而
备份可以在出现问题时进行恢复。
2. 数据库状态,在修改字符集之前,需要确保数据库处于正常
的状态,并且没有正在进行的重要操作。
最好在非高峰期进行字符
集修改,以避免影响数据库的正常运行。
3. 系统权限,进行字符集修改需要具有足够的权限,通常需要
使用sysdba权限或者具有ALTER DATABASE权限的用户来执行字符
集修改操作。
4. 系统空间,在进行字符集修改之前,需要确保数据库所在的
表空间有足够的空间来存储修改后的字符集数据。
字符集修改可能
会导致数据存储空间的变化,需要提前做好空间规划。
5. 数据转换,在进行字符集修改时,需要对现有数据进行转换,以确保数据能够正确地映射到新的字符集中。
这可能涉及到对表中
数据的逐个修改,因此需要谨慎对待,避免数据丢失或损坏。
6. 系统测试,在字符集修改完成后,需要对系统进行全面的测试,确保系统的各项功能和性能都没有受到影响。
特别需要测试与
字符集相关的功能,如排序、比较和检索等。
总的来说,修改Oracle字符集是一个复杂而且危险的操作,需
要在充分的准备和谨慎的态度下进行。
务必在专业人士的指导下进
行字符集修改,并且做好充分的备份和风险评估。
希望这些注意事
项能够帮助你更好地进行Oracle字符集的修改。
Oracle数据库字符集问题分析及解决方法
导 出客 户 端
源服
I 3) 客 户 端
通 常情况下 , 在数据导 出时 , 最好把客 户端 字符集
设 置和数 据库服 务器端相 同 , 样可 以避免在 导 出时 这 发生不必要 的数据 转换 , 如字符集不一致 , 进行 字符集
出导入过程 中主要涉及 以下字符集 :
维普资讯
2 0 年 第 8 期 06
计 算 机 系 统 应 用
Orce数 据 库 字 符 集 问题 分 析及 解 决 方 法 l a
Th a y e a d Solton on Ch r c e Se s Pr l m n Or ce Da a a e e An ls n u i a a t r t ob e i a l t b s
关键 词 : rc O a l 据 库 字符 集 迁移 e数
Oal rc e数据 库 是 目前 比较 流行 的 数据 库平 台 之
一
I D号将会在导 出的二进 制格 式 d mp文 件 的头部 几个 字节中存储 , 当文件 导入 时 , 会检 查 d 将 mp文件使 用
的字 符集设置 , 如果 ( ) 同于 ( ) 2不 3 设置 , 符集 将根 字
()源数据库字符集 : 1 ( )Ep a过程 中用户会 话字 符集 ; 2 xo
( )I ot 3 mp r过程 中用户会话字符集 ;
转换 时 , 可能会导致迁移 失败 或造成 数据的损失。
影 响 Oal 据库 字 符集 最重 要 的参 数 是 N S rc e数 L— LN A G参数 。它的格式如 下…:
b s p rmees 其来源于 po s¥, a e aa tr, rp 是表示 数据库 的
oracle查询字符集语句分享
oracle查 询 字 符 集 语 句 分 享
(1)查看字符集(三条都是等价的)
复制代码 代码如ቤተ መጻሕፍቲ ባይዱ:
select * from v$nls_parameters where parameter='NLS_CHARACTERSET' select * from nls_database_parameters where parameter='NLS_CHARACTERSET' select * from props$ where name='NLS_CHARACTERSET'
(2)查看国家字符集(三条都是等价的) 复制代码 代码如下:
select * from nls_database_parameters where parameter='NLS_NCHAR_CHARACTERSET' select * from nls_database_parameters where parameter='NLS_NCHAR_CHARACTERSET' select * from props$ where name='NLS_NCHAR_CHARACTERSET'
--DataFile脱机 ALTER TABLESPACE BSS11 OFFLINE --作用对象:表空间BSS11的所有datafile ALTER DATABASE 'BSS_03.dbf' OFFLINE ---作用对象:BSS_03.dbf,就一个datafile
Oracle编码格式查看与修改
database altered.
sql> alter database character set internal_use JA16SJIS;
// alter database character set internal_useAL32UTF8;
sql> shutdown immediate;
<!--IWMS_AD_END--> database closed. database dismounted. oracle instance shut down. sql> startup mount; oracle instance started.
total system global area 135337420 bytes
system altered.
sql> alter system set job_queue_processes=0;
system altered.
sql> alter system set aq_tm_processes=0;
system altered.
sql> alter database open;
fixed size
452044 bytes
variable size
109051904 bytes
database buffers
25165824 bytes
redo buffers
667648 bytes
database mounted.
sql> alter system enable restricted session;
登录后才能查看或发表评论立即登录或者逛逛博客园首页பைடு நூலகம்
Oracle查看字符集
Oracle查看字符集1.查看字符集1⼀、oracle服务端字符集2 SQL> select userenv('language') from dual ;34 USERENV('LANGUAGE')5 ----------------------------------------------------6 AMERICAN_AMERICA.ZHS16GBK789⼆、oracle客户段字符集10112.1 window环境下,修改注册表ORACLE_HOME⽬录下的环境变量NLS_LANG。
12132.2 unix/linux环境下,就是环境变量$NLS_LANG1415 [oracle@wang ~]$ echo $NLS_LANG16 AMERICAN_AMERICA.ZHS16GBK1718查看数据库字符集1920数据库服务器字符集select * from nls_database_parameters;,其来源于props$,是表⽰数据库的字符集。
2122 客户端字符集环境select * from nls_instance_parameters;,其来源于v$parameter,表⽰客户端的字符集的设置,可能是参数⽂件,环境变量或者是注册表23 24如何查询dmp⽂件的字符集2526⽤oracle的exp⼯具导出的dmp⽂件也包含了字符集信息,dmp⽂件的第2和第3个字节记录了dmp⽂件的字符集。
如果dmp⽂件不⼤,⽐如只有⼏M或⼏⼗M,可以⽤UltraEdit打开(16进制⽅式),看第2第3个字节的内容,如0354,然后⽤以下SQL查2728 SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;2930 ZHS16GBK3132如果dmp⽂件很⼤,⽐如有2G以上(这也是最常见的情况),⽤⽂本编辑器打开很慢或者完全打不开,可以⽤以下命令(在unix主机上):33cat exp.dmp |od -x|head -1|awk'{print $2 $3}'|cut -c 3-634然后⽤上述SQL也可以得到它对应的字符集2.od 命令解释#od命令功能说明:输出⽂件内容。
Oracle查看数据库字符集和客户端字符集SQL语句
Oracle查看数据库字符集和客户端字符集SQL语句
Oracle 数据库分为数据库字符集和客户端字符集两种!
很多刚接触的朋友经常会搞混这两个字符集,数据库字符集是在创建数据库时进行指定的,不建议更改!而客户端字符集是可以随时更改的!
查询数据库字符集:
select * from nls_database_parameters t where t.parameter i n ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
查询客户端字符集:
SELECT USERENV('language') FROM DUAL;
如何修改客户端字符集?
Windows:
set NLS_LANG=american_america.AL32UTF8set NLS_LANG =SIMPLIFIED CHINESE_CHINA.ZHS16GBK
Linux:
export NLS_LANG=american_america.AL32UTF8export NLS_ LANG="SIMPLIFIED CHINESE_CHINA".ZHS16GBK
以上为常用客户端字符集,一个是英文,一个是中文!
本次分享到此结束啦~
如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle字符集及其修改字符集一、什么是oracle字符集Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。
ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。
它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。
影响oracle数据库字符集最重要的参数是NLS_LANG参数。
它的格式如下: NLS_LANG = language_territory.charset它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。
其中:Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。
如:AMERICAN _ AMERICA. ZHS16GBK从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。
所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。
二.查看数据库字符集这涉及三方面的字符集,一是oracel server端的字符集;二是oracle client端的字符集;三是dmp文件的字符集。
在做数据导入的时候,需要这三个字符集都一致才能正确导入。
1、查询oracle server端的字符集有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:SQL>select userenv(‘language’) fr om dual;结果类似如下:AMERICAN _ AMERICA. ZHS16GBK2、如何查询dmp文件的字符集用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。
如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit 打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;ZHS16GBK如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):catexp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6然后用上述SQL也可以得到它对应的字符集。
3、查询oracle client端的字符集这个比较简单。
在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。
还可以在dos窗口里面自己设置,比如: setnls_lang=AMERICAN_AMERICA.ZHS16GBK这样就只影响这个窗口里面的环境变量。
在unix平台下,就是环境变量NLS_LANG。
$echo $NLS_LANGAMERICAN_AMERICA.ZHS16GBK如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。
补充:(1).数据库服务器字符集select * from nls_database_parameters来源于props$,是表示数据库的字符集。
(2).客户端字符集环境select * from nls_instance_parameters其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表(3).会话字符集环境select * from nls_session_parameters来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session 完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。
(4).客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。
如果多个设置存在的时候,alter session>环境变量>注册表>参数文件字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。
如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。
三、修改oracle的字符集上文说过,oracle的字符集有互相的包容关系。
如us7ascii就是zhs16gbk的子集,从us7ascii 到zhs16gbk不会有数据解释上的问题,不会有数据丢失。
在所有的字符集中utf8应该是最大,因为它基于unicode,双字节保存字符(也因此在存储空间上占用更多)。
一旦数据库创建后,数据库的字符集理论上讲是不能改变的。
因此,在设计和安装之初考虑使用哪一种字符集十分重要。
根据Oracle的官方说明,字符集的转换是从子集到超集受支持,反之不行。
如果两种字符集之间根本没有子集和超集的关系,那么字符集的转换是不受oracle支持的。
对数据库server而言,错误的修改字符集将会导致很多不可测的后果,可能会严重影响数据库的正常运行,所以在修改之前一定要确认两种字符集是否存在子集和超集的关系。
一般来说,除非万不得已,我们不建议修改oracle数据库server端的字符集。
特别说明,我们最常用的两种字符集ZHS16GBK和ZHS16CGB231280之间不存在子集和超集关系,因此理论上讲这两种字符集之间的相互转换不受支持。
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>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无法打开,就需要用程序的方法了安装时采用什么字符集主要看你的需求,一般测试用的话,就用UTF8.后面可以修改,10g:UTF8 到ZHS16GBKSHUTDOWN IMMEDIATE;STARTUP MOUNT ;ALTER SYSTEM ENABLE RESTRICTED SESSION;ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;ALTER SYSTEM SET AQ_TM_PROCESSES=0;ALTER DATABASE OPEN;ALTER DATABASE NATIONAL CHARACTER SET AL16UTF16; 更改国际字符集===========ALTER DATABASE CHARACTER SET ZHS16GBK; 更改本地字符集或者ALTER DATABASE character set INTERNAL_USE ZHS16GBK;===========SHUTDOWN IMMEDIATE;STARTUP ;。