存儲過程字元集
1. PLsql 表備注,存儲過程里的中文都顯示亂碼,請問怎麼處理
方法/步驟
登陸plsql,執行sql語句,輸出的中文標題顯示成問號????;條件包含中文,則無數據輸出
輸入sql語句select * from V$NLS_PARAMETERS查看字元集,查看第一行value值是否為簡體中文
進入注冊表,依次單擊HKEY_LOCAL_MACHINE --->SOFTWARE ---> ORACLE--->home(小編安裝的是Oracle 11g,這里顯示成KEY_OraDb11g_home1),找到NLS_LANG,查看數值數據是否為:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
如果以上設置都沒有問題,那就要查看下環境變數的設置,查看是否有變數NLS_LANG,沒有則新建該變數
新建變數,設置變數名:NLS_LANG,變數值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK,確定即可
6
退出plsql,重新登陸plsql。輸入sql語句,執行,中文標題終於正常顯示,也有數據輸出了
2. imp後表中漢字正常,存儲過程漢字亂碼,如何解決和exp時字元集一樣的
我認為是客戶端字元集的問題
Oracle進行字元轉換的時候,需要檢查你的客戶端的字元集設置
我記得是NLS_LANG變數,不是你查的LANG
試試設置一次NLS_LANG=AMERICAN_AMERICA.AL32UTF8試試
兩邊都是!
我也很好奇,原理上是這樣,不知道是否可行
3. Mysql存儲過程中文亂碼問題
三處編碼一致,mysql數據編碼,欄位編碼
php程序編碼
mysql存儲過程編碼
這幾處的編碼都要一致才可以
查看下你的資料庫編碼,還有欄位編碼和存儲過程,php程序是否一致
4. 存儲過程數據排序問題
如果語句是完全相同的話,那就是數據、資料庫字元集、排序規則這幾方面的問題了。
數據是否存在差異(包括不可見字元)、2個資料庫的字元集是否一致、2個資料庫的排序規則是否一致、是否區分大小寫。
5. SQL如何修改存儲過程中的排序規則
改變資料庫的排序規則(做ALTER之前,要中斷所有用戶對此資料庫的訪問)
語法:
use
master
go
ALTER
DATABASE
資料庫名
COLLATE
排序規則名
例子:
use
master
go
ALTER
DATABASE
luwanzhufa
COLLATE
Chinese_PRC_CS_AS
Chinese_PRC_CS_AS這個是簡體中文。而且區分大小寫的排序規則。
192
Japanese_BIN
二進制順序、用於
932(日文)字元集。
193
Japanese_CI_AS
字典順序、不區分大小寫、用於
932(日文)字元集。
200
Japanese_CS_AS
字典順序、區分大小寫、用於
932(日文)字元集。
198
Chinese_PRC_BIN
二進制順序、用於
936(簡體中文)字元集。
199
Chinese_PRC_CI_AS
字典順序、不區分大小寫、用於
936(簡體中文)字元集。
203
Chinese_PRC_CS_AS
字典順序、區分大小寫、用於
936(簡體中文)字元集。
6. oracle中用存儲過程加密一段字元串有哪些方法
可以例用Oracle 自帶的Wrap工具實現,此工具在$ORACLE_HOME/BIN目錄下,具體如下
1、設置字元集環境變數
set NLS_LANG=CHINESE_CHINA.ZHS16GBK
2、創建一個存儲過程文件
在E:\下創建test.sql文件,內容如下:
create or replace procere test1(i in number) as
begin
dbms_output.put_line(' 輸入參數是'||to_char(i));
end;
3、加密
c:\> cd %ORACLE_HOME%\BIN
c:\>wrap iname=e:\test1.sql
PL/SQL Wrapper: Release 8.1.7.0.0 - Proction on Tue Nov 27 22:26:48 2001
Copyright (c) Oracle Corporation 1993, 2000.All Rights Reserved.
Processing test1.sql to test1.plb
4、運行test1.plb
sqlplus /nolog
SQL>conn TEST/TEST@db01
SQL> @e:\a.plb
過程已創建。
5、運行存儲過程
SQL> set serveroutput on
SQL> execute test1(1);
輸入參數是1
PL/SQL 過程已成功完成。
6、查看存儲過程的代碼
SQL> select name,text from all_source where type='PROCEDURE' and name='TEST1';
7. 為什麼MYSQL的儲存語句出現這樣的錯誤
基本判定為字元集的問題
通過以下代碼可以復現:
dropprocereifexistsdelete_employees;
delimiter$$
--bysleest,2019/05/23此處為復現問題,特意指定入參字元集為mysql默認字元集latin1
createproceredelete_employees(inxmchar(6)CHARSETlatin1COLLATElatin1_bin)
begin
--begin測試用
;
createtemporarytableemployees(`姓名`char(6));
--end測試用
deletefromemployeeswhere姓名=xm;
end$$
calldelete_employees('李麗');
在終端或者連接工具中執行會得到一致的錯誤
calldelete_employees('李麗'); ErrorCode:1366.Incorrectstringvalue:'xE6x9Dx8ExE4xB8xBD'forcolumn'xm'atrow1
這里建議在建立完存儲過程後, 查下存儲過程的字元集:
showcreateproceredelete_employees;
主要看結果中的這三列
#character_set_client,collation_connection,DatabaseCollation
'utf8','utf8_general_ci','utf8mb4_general_ci'
本人使用的環境是utf8mb4字元集, 你看看你的會不會是latin1, 如果是的話兩種方案
改資料庫字元集, 通用些utf8或者支持emjio的utf8mb4, 重啟mysql服務再重連試驗
建立的每個存儲過程手動指定字元集
如:
createproceredelete_employees(inxmchar(6)CHARSETutf8COLLATEutf8_bin)...
這樣再試試
8. plsql打開存儲過程亂碼
可能當時你創建存儲過程時,所使用客戶端的字元集不正確,而能正常顯示中文的客戶端字元集是正確的,你只要找到創建存儲過程的腳本,在正確字元集的客戶端上重新執行一下就行 了
9. 資料庫中怎樣創建加密的存儲過程
可以例用Oracle
自帶的Wrap工具實現,此工具在$ORACLE_HOME/BIN目錄下,具體如下
1、設置字元集環境變數
set
NLS_LANG=CHINESE_CHINA.ZHS16GBK
2、創建一個存儲過程文件
在E:\下創建test.sql文件,內容如下:
create
or
replace
procere
test1(i
in
number)
as
begin
dbms_output.put_line('
輸入參數是'||to_char(i));
end;
3、加密
c:\>
cd
%ORACLE_HOME%\BIN
c:\>wrap
iname=e:\test1.sql
PL/SQL
Wrapper:
Release
8.1.7.0.0
-
Proction
on
Tue
Nov
27
22:26:48
2001
Copyright
(c)
Oracle
Corporation
1993,
2000.All
Rights
Reserved.
Processing
test1.sql
to
test1.plb
4、運行test1.plb
sqlplus
/nolog
SQL>conn
TEST/TEST@db01
SQL>
@e:\a.plb
過程已創建。
5、運行存儲過程
SQL>
set
serveroutput
on
SQL>
execute
test1(1);
輸入參數是1
PL/SQL
過程已成功完成。
6、查看存儲過程的代碼
SQL>
select
name,text
from
all_source
where
type='PROCEDURE'
and
name='TEST1';
結果:看不到其原碼
10. java代碼調Oracle的存儲過程收集表中的數據後將數據錄入新建的文件這個過程中文件的字元集編碼以哪個為准
一般資料庫的編碼集與java工作空間字元集是一致的,不一致的話,可以以資料庫為基準,也可以取出來後再轉碼呀