当前位置:首页 » 编程语言 » sql查询字符集
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql查询字符集

发布时间: 2022-02-15 01:36:19

‘壹’ 怎么样查询数据库当前所用的字符集

Oracle数据库查看和修改服务器端的字符集的方法是本文主要要介绍的内容,接下来救让我们一起来了解一下这部分内容。

A、oracle server 端字符集查询

select userenv('language') from al

其中NLS_CHARACTERSET 为server端字符集

NLS_LANGUAGE 为 server端字符显示形式

B、查询oracle client端的字符集

$echo $NLS_LANG

如果发现你select 出来的数据是乱码,请把client端的字符集配置成与linux操作系统相同的字符集。如果还是有乱码,则有可能是数据库中的数据存在问题,或者是oracle服务端的配置存在问题。

C、server端字符集修改

将数据库启动到RESTRICTED模式下做字符集更改:

sql> conn /as sysdba Connected.

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount ORACLE instance started.

Total System Global Area 236000356 bytes

Fixed Size 451684 bytes

Variable Size 201326592 bytes

Database Buffers 33554432 bytes

Redo Buffers 667648 bytes

Database 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 ZHS16GBK;

ALTER DATABASE CHARACTER SET ZHS16GBK ERROR at line 1:

ORA-12712: new character set must be a superset of old character set

提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:

SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;

Database altered.

SQL> select * from v$nls_parameters;



19 rows selected.

重启检查是否更改完成:

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup ORACLE instance started.

Total System Global Area 236000356 bytes

Fixed Size 451684 bytes

Variable Size 201326592 bytes

Database Buffers 33554432 bytes

Redo Buffers 667648 bytes

Database mounted.

Database opened.

SQL> select * from v$nls_parameters;



19 rows selected.

我们看到这个过程和之前ALTER DATABASE CHARACTER SET操作的内部过程是完全相同的,也就是说INTERNAL_USE提供的帮助就是使Oracle数据库绕过了子集与超集的校验。

这一方法在某些方面是有用处的,比如测试;应用于产品环境大家应该格外小心,除了你以外,没有人会为此带来的后果负责。

结语(我们不妨再说一次):

对于DBA来说,有一个很重要的原则就是:不要把你的数据库置于危险的境地!

这就要求我们,在进行任何可能对数据库结构发生改变的操作之前,先做有效的备份,很多DBA没有备份的操作中得到了惨痛的教训。

D、client端字符集修改

在 /home/oracle与 /root用户目录下的。bash_profile中

添加或修改 export NLS_LANG="AMERICAN_AMERICA.UTF8" 语句

‘贰’ 如何查看plsql数据库字符集编码格式

一、关于PLSQL无法正确显示中文
刚才下载安装了PLSQL Developer 9.0.0.1601 汉化绿色版,执行SQL查询语句,发现显示的数据中只要有中文都会以?表示。经过网上查询得知这是客户端跟服务器的字符集不匹配造成的。解决方法如下:
1、查询Oracle server端的字符集。打开PLSQL的查询窗口中输入下面SQL查询语句。
select userenv('language') from al;
得到的服务器字符集为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
2、【我的电脑】中环境变量界面,在系统变量中新加:
变量名:NLS_LANG
变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
变量值跟服务器查询到的值一致即可。
由此设置步骤可得知此设置不仅仅是针对PLSQL的,所有在客服机上连接ORACLE时显示的中文为?时都必须通过这个方法设置其字符集与服务器上的一致方可正确显示中文内容。
二、PLSQL绿色汉化版设置软件的中文显示
在PLSQL中点击菜单 tools--preferences 在弹出的设置窗口中找到 appearance——language 选择简体中文即可。
三、PLSQL登录时,在登录窗口中的数据库内容应如果设置
这个地方PLSQL其实会读取一个文件,文件的全路径为:ORACLE客服端所在目录 app\Administrator\proct\11.2.0\client_1\Network\Admin\tnsnames.ora
如我的ORACLE客户端安装在D盘则 D:\app\Administrator\proct\11.2.0\client_1\Network\Admin\tnsnames.ora
一般新装的ORACLE客户端没有这个文件,这个文件需要自己配置或通过ORACLE专门的配置程序进行设置。但更简便的方法是直接从其它已配置过的计算机上将这个文件复制过来。

‘叁’ SQL Server DB编码查询

use master
select * from syscharsets
就可以得到数据库的字符集。

查询数据库版本:
http://support.microsoft.com/kb/321185/zh-cn (微软,若自己不知道数据库的安装的版本,先看后面一块)。

其他:
1.用sp_helpsort就可以查出当前sql的排序规则,字符集就是用排序规则的前半部分来表达的。
2.用全局变量@@language可以看你当前的语言,用sp_helplanguage可以查看当前语言的详细格式
3.用sp_enumcodepages可以查看sql支持字符集,但并没有与1中的排序规则前部分对应

所以要查看sql的字符集,应该是用sp_helpsort(Exec Sp_helpsort)得出的结果,再看结果的前半部比如chinese_prc就代表简体中文的Unicode字符,至于其他的可以搜索一下。

‘肆’ 怎么查看SQLSERVER的字符集设置

user master
select SERVERPROPERTY(N'edition') as Edition --数据版本,如企业版、开发版等
SERVERPROPERTY(N'collation') as Collation --数据库字符集
SERVERPROPERTY(N'servername') as ServerName --服务名
@@VERSION as Version --数据库版本号
@@LANGUAGE AS Language --数据库使用的语言,如us_english等
参考资料链接:http://www.cnblogs.com/fygh/archive/2012/05/15/2501598.html。

拓展:

1、SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS)。

2、SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。Microsoft SQL Server近年来不断更新版本,1996年,Microsoft 推出了SQL Server 6.5版本;1998年,SQL Server 7.0版本和用户见面;SQL Server 2000是Microsoft公司于2000年推出,目前最新版本是2015年份推出的SQL SERVER 2015。

‘伍’ 怎么使用SQL语句查MySQL数据库中数据表的字符集类型

查看数据库的字符集

show variables like 'character\_set\_%';
输出:
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
+--------------------------+--------+

‘陆’ 如何查找sql的字符集,并把字符集导出来

基本上现在的字符集 MySQL 都支持,查看 MySQL 支持的字符集列表, 有两种方法:
1. SQL 语句
2. 查看元数据字典表
查询结果:
1)第一列代表字符集名字;
2)第二列表示字符集排序规则;
3)第三列表示字符集描述;
4)第四列表示字符集编码的最大字节数。

‘柒’ 怎么设置sql查询语句的字符集

user master
select SERVERPROPERTY(N'edition') as Edition --数据版本,如企业版、开发版等
,SERVERPROPERTY(N'collation') as Collation --数据库字符集
,SERVERPROPERTY(N'servername') as ServerName --服务名
,@@VERSION as Version --数据库版本号
,@@LANGUAGE AS Language --数据库使用的语言,如us_english等

‘捌’ 如何查看Oracle数据库字符集,详细操作,xx

数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。

客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter,

表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表

会话字符集环境select * from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。

客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件

字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。

涉及三方面的字符集,
1. oracel server端的字符集;
2. oracle client端的字符集;
3. dmp文件的字符集。

在做数据导入的时候,需要这三个字符集都一致才能正确导入。

2.1 查询oracle server端的字符集
有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:
SQL> select userenv('language') from al;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK

SQL>select userenv(‘language’) from al;
AMERICAN _ AMERICA. ZHS16GBK

2.2 如何查询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 al;
ZHS16GBK

如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):
cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
然后用上述SQL也可以得到它对应的字符集。

2.3 查询oracle client端的字符集
在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在dos窗口里面自己设置,
比如: set nls_lang=AMERICAN_AMERICA.ZHS16GBK
这样就只影响这个窗口里面的环境变量。

在unix平台下,就是环境变量NLS_LANG。
$echo $NLS_LANG
AMERICAN_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字符。
如果多个设置存在的时候,NLS作用优先级别:Sql function > alter session > 环境变量或注册表> 参数文件> 数据库默认参数

字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。