名站网址导航为大家提供关于数据库教程相关的教程网站知识。
[Oracle] 如何使用触发器实现IP限制用户登录
复制具体相关代码 具体相关代码如下:,create or replace trigger logon_ip_control after logon on database declare ip STRING(30); user S,复制具体相关代码 具体相关代码如下:,[oracle@lxdb2 ~]$ sqlplus epay_user@pri SQL*Plus: Release 11.2.0.3.0 Production on Wed Jul 3 19:23:4,复制具体相关代码 具体相关代码如下:,[oracle@lxdb1 ~]$ sqlplus epay_user SQL*Plus: Release 11.2.0.3.0 Production on Wed Jul 3 11:24:25 20,复制具体相关代码 具体相关代码如下:,[oracle@lxdb1 ~]$ sqlplus epay_user SQL*Plus: Release 11.2.0.3.0 Production on Wed Jul 3 11:24:25 20
基本概念
字符集(Character set):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。常见的字符集有ASCII,ZhS16GB231280,ZhS16GBK等。
字符编码(Character Encoding):是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其它的一个集合(如电脑编码)进行配对。即在符号集合与数字系统之间建立对应关系。与字符集相对应,常见的字符编码有:ASCii,ZhS16GBK,ZhT16BIG5,ZhS32GB18030等。
字符集的定义其实就是字符的集合,而字符编码则是指怎么将这些字符变成字节用于保存、读取和传输。
万国码(Unicode):包含了几乎人类所有可用的字符,每年还在不断的增加,可以看作是一种通用的字符集。它将全世界所有的字符统一化,统一编码,不会再出现字符不兼容和字符转换的问题。
它有以下三种编码相关方式:
1.UTF-32编码:固定使用4个字节来表示一个字符,存在空间利用效率的问题。
2.UTF-16编码:对相对经常用的的60000余个字符使用两个字节进行编码,其余的使用4字节。
3.UTF- 8编码:兼容ASCII编码;拉丁文、希腊文等使用两个字节;包括汉字在内的其它经常用的字符使用三个字节;剩下的极少使用的字符使用四个字节。
Oracle字符集基本原理
在搞懂Oracle字符集基本原理之前,一定要先分清以下三个概念:
1. Oracle网站数据库站点服务器字符集:即Oracle以哪种字符编码存储字符,可以通过以下数据库语句查出网站数据库字符集的设置。
复制具体相关代码 具体相关代码如下:
SQL> select * from v$nls_parameters where parameter='NLS_ChARACTERSET';
PARAMETER VALUE
------------------------------ -----------------
NLS_ChARACTERSET AL32UTF8
2. 客户端操作办法系统字符集:即客户端操作办法系统以哪种字符编码存储字符。
假如如果是Windows,可以使用chcp开始执行命令获得具体相关代码页(code page):
复制具体相关代码 具体相关代码如下:
C:\Users\xianzhu>chcp
Active code page: 936
根据该具体相关代码页,到微软的官方文档《National Language Support (NLS) API Reference》找到其对应的字符集。
假如如果是Linux,字符集在/etc/sysconfig/i18n设置:
复制具体相关代码 具体相关代码如下:
LANG="zh_CN.GB2312" (指定当前操作办法系统的字符集)
SUPPORTED="zh_CN.GB2312"(指定当前操作办法系统支持的字符集)
SYSFONT="lat0-sun16"(指定当前操作办法系统的字体)
3. 客户端NLS_LANG参数:该参数用于向Oracle指示客户端操作办法系统的字符集。
有了以上3个基本概念之后,我来阐述一下Oracle字符集转换的基本原则:
1.设置客户端的NLS_LANG为客户端操作办法系统的字符集
2.假如如果网站数据库字符集等于NLS_LANG,网站数据库和客户端传输字符时不作任何转换
3.假如如果它们俩不等,则需要在不同字符集间转换,只有客户端操作办法系统字符集是网站数据库字符集子集的基础上才能正确转换,否则会出现乱码。
几种常见情况分析
下面先看一个例子,再透过现象看本质,咱们会针对这个例子进行分析。
该例子如下:
复制具体相关代码 具体相关代码如下:
1. 网站数据库字符集为Unicode(UTF-8编码)
咱们的网站数据库版本是10.2.0.4.0,网站数据库字符集是:
SQL> select * from v$nls_parameters where parameter='NLS_ChARACTERSET';
PARAMETER VALUE
---------------------------------------- ------------------------------
NLS_ChARACTERSET AL32UTF8
2. 客户端操作办法系统字符集为具体相关代码页936(字符集为ZhS16GBK)
可以使用chcp获得windows的具体相关代码页(code page)
C:\Documents and Settings\a105024\Desktop>chcp
Active code page: 936
3. 创建测试表
SQL> create table test(id number,var varchar2(30));
Table created.
4. 插入数据
这里在同一个操作办法系统启动两个session,session1的NLS_LANG设为和网站数据库字符集一样(即AL32UTF8):
C:\Documents and Settings\a105024\Desktop>set nls_lang=Simplified Chinese_China.AL32UTF8
连接网站数据库并插入一条数据:
Session_1>insert into test values(1,'中国');
1 row created.
Session_1>commit;
Commit complete.
session2的NLS_LANG设为和客户端操作办法系统一样(即ZhS16GBK):
C:\Documents and Settings\a105024\Desktop>set nls_lang=Simplified Chinese_China.ZhS16GBK
连接网站数据库并插入一条数据:
Session_2>insert into test values(2,'中国');
1 row created.
Session_2>commit;
Commit complete.
5. 执行查询
在session 1上执行查询:
Session_1>select * from test;
ID VAR
---------- ---------------------
1 中国
2 涓 浗
在session 2上执行查询:
Session_2>select * from test;
ID VAR
---------- --------------------
1 ???
2 中国
上面例子看起来很诡异,session1和2都能正常显示自己插入的字符串,又都不能正常显示对方插入的字符串。为了弄清楚,咱们首先得知道网站数据库里对这两个字符串是怎么存储的。咱们可以使用dump函数获得字符在网站数据库的编码:
复制具体相关代码 具体相关代码如下:
关于数据库教程相关的教程网站知识今天我们就说到这里了,希望可以帮到大家。