『壹』 怎麼樣查詢資料庫當前所用的字元集
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。