‘壹’ 怎么查看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。
‘贰’ 如何查看sybase数据库的字符集
1. JDBC连接串要有字符集设置
jdbc:sybase:Tds:192.168.3.11:5000/Wfis_db?charset=cp936
2. 服务器配置成cp936
(1) 使用isql查看当前已经安装的字符集
isql -Usa -P
>use master
>go
>select id,name from syscharsets
>go
id name
--- ----------------
0 ascii_8
1 iso_1
2 cp850
20 defaultml
21 thaidict
22 iso14651
24 utf8bin
25 binary
39 altnoacc
45 altdict
46 altnocsp
47 scandict
48 scannocp
50 bin_iso_1
50 bin_cp850
51 dict
52 nocase
53 nocasep
54 noaccent
55 espdict
56 espnocs
57 espnoac
59 rusnocs
64 cyrnocs
65 elldict
69 hundict
70 hunnoac
71 hunnocs
73 turknoac
74 turknocs
129 cp932bin
130 dynix
137 gb2312bn
140 cyrdict
155 turdict
161 euckscbn
163 gbpinyin
165 rusdict
179 sjisbin
192 eucjisbn
194 big5bin
(41 rows affected)
从列表中看出没有安装cp936字符集
(2) 查看当前使用的缺省字符集
>sp_configure "default char"
>go
Parameter Name Default Memory Used Config Value
Run Value Unit Type
------------------------------ ----------- ----------- ------------
----------- -------------------- ----------
default character set id 2 0 2
2 id static
缺省字符集的id是2,查看上面的列表,可以得知是cp850
(3) 因为上面的列表中没有安装cp936,所以就安装cp936字符集
进入目录C:\sybase\charsets\cp936
运行命令 charset -Usa -Plongtop binary.srt cp936
运行完成后,系统就安装了cp936字符集
(4) 验证是否确实安装了cp936字符集
isql -Usa -P
>use master
>go
>select id,name from syscharsets
>go
id name
--- ------------------------------
0 ascii_8
1 iso_1
2 cp850
20 defaultml
21 thaidict
22 iso14651
24 utf8bin
25 binary
39 altnoacc
45 altdict
46 altnocsp
47 scandict
48 scannocp
50 bin_iso_1
50 bin_cp850
50 bin_cp936
51 dict
52 nocase
53 nocasep
54 noaccent
55 espdict
56 espnocs
57 espnoac
59 rusnocs
64 cyrnocs
65 elldict
69 hundict
70 hunnoac
71 hunnocs
73 turknoac
74 turknocs
129 cp932bin
130 dynix
137 gb2312bn
140 cyrdict
155 turdict
161 euckscbn
163 gbpinyin
165 rusdict
171 cp936
179 sjisbin
192 eucjisbn
194 big5bin
(43 rows affected)
从列表中可以发现已经安装了cp936,id是171
(5) 把系统的当前缺省字符集设置为cp936
>sp_configure "default char",171
>go
In changing the default sort order, you have also reconfigured SQL Server's
default character set.
Parameter Name Default Memory Used Config Value
Run Value Unit Type
------------------------------ ----------- ----------- ------------
----------- -------------------- ----------
default character set id 2 0 171
2 id static
(1 row affected)
Configuration option changed. Since the option is static, Adaptive Server must
be rebooted in order for the change to take effect.
Changing the value of 'default character set id' to '171' increases the amount
of memory ASE uses by 6 K.
(return status = 0)
(6) 重启Sybase服务,使更改生效
第一次重启,系统会对已经存在的数据进行转换,转换完成后自动停止服务,只要再次启动服务就可以了。
(7) 更改DB客户端的字符集
DBArtisan中要更改客户端的字符集为cp936才能连接cp936的服务器
通过菜单\Logfile\Options...打开对话框,选择Connection标签,
更改Client Character输入框的值为cp936。
数据库的charset修改为cp936时,使用isql按如下的方式
isql -Usa -P -Sdbserver -Jcp936
‘叁’ sybase中文字符查询
“机械厂”的GB系列编码(cp936约同)字节序列是BB FA D0 B5 B3 A7,“党”是B5 B3,按照字节为单位去找,确实能在第5个字节处匹配,于是出现了并非期望的查询结果。
根治的办法:
把数据库服务器的字符集改为utf-8,客户端连接用cp936字符集。
utf-8字符编码的最重要特征是字符的第一个字节和后续字节有明显的不同,不会混淆,所以仍然按照字节流的方式去找,也不会找错。“机械厂”序列是E6 9C BA E6 A2 B0 E5 8E 82,“党”是E5 85 9A,这3个字节在9个字节中就不能匹配了。
凑合的办法:不改字符集,条件是字符串中全是汉字,那么加一个条件就是匹配位置是偶数,对于从1开始的,则匹配位置是奇数。
select * from T1 where c1 like "%党%"改写为select * from T1 where charindex( “党”, c1 ) & 1 = 1
不过,即使这样约束,这个办法也不大可靠,例如“机械厂党支持部”就找不到了,因为第一个B5 B3的匹配在位置4了,第二个才会是7,而charindex是返回第一个匹配。
建议,痛下决心,采用根治方法吧。
‘肆’ 怎样查看数据库的字符集
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" 语句
‘伍’ 关于java查询数据库字符集的问题
1. JDBC连接串要有字符集设置
jdbc:sybase:Tds:192.168.3.11:5000/Wfis_db?charset=cp936
我项目中的写法:
Db.url=jdbc:sybase:Tds:angkor[服务器名或IP]:5000/angkor[数据库名]?charset=eucgb
2. 服务器配置成cp936
(3) 因为上面的列表中没有安装cp936,所以就安装cp936字符集
进入目录C:\sybase\charsets\cp936
运行命令 charset -Usa -Plongtop binary.srt cp936
运行完成后,系统就安装了cp936字符集
(4) 验证是否确实安装了cp936字符集
isql -Usa -Plongtop
>use master
>go
>select id,name from syscharsets
>go
id name
(5) 把系统的当前缺省字符集设置为cp936
>sp_configure "default char",171
>go
In changing the default sort order, you have also reconfigured SQL Server's
default character set.
Parameter Name Default Memory Used Config Value
Run Value Unit Type
------------------------------ ----------- ----------- ------------
----------- -------------------- ----------
default character set id 2 0 171
2 id static
(1 row affected)
Configuration option changed. Since the option is static, Adaptive Server must
be rebooted in order for the change to take effect.
Changing the value of 'default character set id' to '171' increases the amount
of memory ASE uses by 6 K.
(return status = 0)
(6) 重启Sybase服务,使更改生效
第一次重启,系统会对已经存在的数据进行转换,转换完成后自动停止服务,只要再次启动服务就可以了。
(7) 更改DB客户端的字符集
DBArtisan中要更改客户端的字符集为cp936才能连接cp936的服务器
通过菜单\Logfile\Options...打开对话框,选择Connection标签,
更改Client Character输入框的值为cp936。
数据库的charset修改为cp936时,使用isql按如下的方式
isql -Usa -Plongtop -Sdbserver -Jcp936
‘陆’ SYBASE导入数据时提示乱码错误
SYBASE导入数据时提示乱码错误关于这个问题,我觉得 这是oracle字符集的问题。 dmp文件是从ZHT16BIG5字符集(繁体中文)导出的,而你要导入的数据库字符集是ZHS16GBK(简体中文) 可以通过修改导入的数据库字符集来导入此文件。怎样修改字符集? 8i以上版本可以通过alter database来修改字符集,但也只限于子集到超集,不建议修改props$表,将可能导致严重错误。 Startup nomount; Alter database mount exclusive; Alter system enable restricted session; Alter system set job_queue_process=0; Alter database open; Alter database character set ZHT16BIG5; 导入后还可以把字符集改回ZHS16GBK,如果没有什么问题,并且数据不是乱码,就算成功了。
‘柒’ sybase数据库查询数据
1.log文件用ultraedit就可以打开,下载一个安装就可;
2.我遇到的db文件,都是asa数据库的(sybase
sql
anywhere
7)可安装之后,打开\%sybase%\win32\dbisqlc.exe,输入用户名密码,浏览到该db文件,就可用sql语句对其内容进行查询。
另外,我在网上也搜到了一个方法:
后来装了个power
build
8,里面就有一步是要装sybase
7的数据库。安装完之后,就可以在控制面板的管理工具下面的odbc管理器中,添加sybase
驱动的这种db格式的数据源,然后就可以在office
access中导入这个odbc数据源,查看表里面的文件了。需要注意的是:db
文件的默认用户名密码是dba:sql,这是需要输入odbc的。