熱點推薦:
您现在的位置: 電腦知識網 >> 操作系統 >> Windows優化 >> 正文

給Windows控制台使用正確的NLS

2022-06-13   來源: Windows優化 

  大多數使用Windows命令提示符來運行SQL*Plus命令的用戶通常使用一個字符集而這種字符集對於超過ASCII 的位字符范圍之外的值就不正確了一旦你嘗試從其他歐洲語言進入有特定音符的字符擴展字符就會被翻譯錯誤
  
  舉例來說如果在命令提示窗口運行sqlplus默認的字符設置通常是AMERICAN_AMERICAUSASCII(假如你沒有特別指定NLS_LANG字符設置)如果你將resume字樣鍵入SQL*Plus提示符中你將看到如下
  
  sqlplus s scott/tiger
  select resume from dual;
  
  R?SUM?
  
  r?sum?
  
  問題是Windows命令提示符本質上類似於DOS它繼承了代碼頁的全球語言支持(NLS)你可以在控制台提示符中鍵入chcp命令來查看你目前的代碼頁是什麼
  
  C:\>chcp
  Active code page:
  
  在這個例子中我們使用了號代碼頁和一個美式鍵盤因此確切的NLS_LANG字符設置應該是USPCUSPC僅僅檢索二進制值並試圖將它原樣的直接地傳送到UTF數據庫
  
  正確設置NLS_LANG並再次使用這個例子
  
  C:\>set NLS_LANG=AMERICAN_AMERICAUSPC
  C:\>sqlplus s scott/tiger
  select resume from dual;
  
  RÉSUMÉ
  
  resume
  
  在Windows中有一點非常重要那就是給像SQL*Loader這樣的程序以及撰寫SQL*Plus腳本(其中可能使用非ASCII字符)保留NLS_LANG變量設置特別是如果你的編輯器使用的是和DOS/OEM一樣的字體因為它們將和你的代碼頁設置一致
  
  NLS_LANG對插入數據也有影響譬如說
  
  set NLS_LANG=
  sqlplus s scott/tiger
  create table text (a varchar());
  insert into text values (resume);
  exit;
  
  set NLS_LANG=AMERICAN_AMERICAUSPC
  sqlplus s scott/tiger
  insert into text values (resume);
  select a from text;
  
  A
  
  r?sum?
  resume
  
  select dump(a) from text;
  
  DUMP(A)
  
  Typ= Len=:
  Typ= Len=:
  
  第一個字節是不正確的當然並不是有意的你可以根據需要從Oracle聯機文件中查閱正確的NLS_LANG字符設置
  
  

From:http://tw.wingwit.com/Article/os/youhua/201311/10943.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.