前台页面验证中需要注意的一个与VARCHAR2(N BYTE)和VARCHAR2(N CHAR)的小细节

1:一个小的测试实例


CREATE TABLE SALES.TEST_
(
TEST_BYTE VARCHAR2(5 BYTE),
TEST_CHAR VARCHAR2(5 CHAR)
)--TABLE CREATED

INSERT INTO TEST_ (TEST_CHAR) VALUES(‘12345‘)--1 ROW INSERTED

INSERT INTO TEST_ (TEST_BYTE) VALUES(‘12345‘)--1 ROW INSERTED

INSERT INTO TEST_ (TEST_CHAR) VALUES(‘abcde‘)--1 ROW INSERTED

INSERT INTO TEST_ (TEST_BYTE) VALUES(‘abcde‘)--1 ROW INSERTED

INSERT INTO TEST_ (TEST_CHAR) VALUES(‘@#$%&‘)--1 ROW INSERTED

INSERT INTO TEST_ (TEST_BYTE) VALUES(‘@#$%&‘)--1 ROW INSERTED

INSERT INTO TEST_ (TEST_CHAR) VALUES(‘[email protected]_好‘)--1 ROW INSERTED

INSERT INTO TEST_ (TEST_BYTE) VALUES(‘[email protected]_好‘)--ORA-12899: value too large for column "SALES"."TEST_"."TEST_BYTE" (actual: 7, maximum: 5)

INSERT INTO TEST_ (TEST_CHAR) VALUES(‘一二三四五‘)--1 ROW INSERTED

INSERT INTO TEST_ (TEST_BYTE) VALUES(‘一二三四五‘)--ORA-12899: value too large for column "SALES"."TEST_"."TEST_BYTE" (actual: 15, maximum: 5)

2:实例的说明

从上面的例子中我们已经看到了比较的明显的区别,对于VARCHAR2(5 BYTE)和VARCHAR2(5
CHAR)当插入的字符个数为五且其中有中文时或者是全是中文时就报错!所以在前台页面做有关长度的控制和验证时,必须注意!如果数据库中定义的是VARCHAR2(N
CHAR),则定义的是几前台页面控制最大字符个数是几就行了,如果数据库中定义的是VARCHAR2(N
BYTE),则必须根据数据库默认的字符集结合NLS_LENGTH_SEMANTICS的值和是否有可能输入中文来控制!上述实例报错的原因很明确,但是为什么报这样的错误呢?

首先要明确以下个点:

1)VARCHAR2(N CHAR)是指允许最大N个字符的存储,与BYTE的个数无关

2)VARCHAR2(5
BYTE)是指只允许最大N个BYTE长度的字符存储,和字符的个数无关

3)从9i开始,oracle提供了NLS_LENGTH_SEMANTICS这个参数,其有两个取值,CHAR和BYTE。当为CHAR时字符类型的长度是按字符个数来计算,而不是按BYTE来计算,这在使用变长字符集(AL32UTF8)的情况下非常有用,因为一个字符所占用的字节数是不定的,就给我们准确估计字段长度(BYTE)带来不便。同时当为CHAR时,对那些采用7/8bit的字符集(US7ASCII/WE8MSWIN1252)来说也不会带来空间上的浪费。

4)我的数据库是ORACLE 10
G NLS_LENGTH_SEMANTICS默认值是BYTE(如下图所示)

5)我的字符集是AMERICAN_AMERICA.AL32UTF8


SELECT USERENV(‘LANGUAGE‘) FROM DUAL--AMERICAN_AMERICA.AL32UTF8

或者使用下面的SQL语句查询


SELECT * FROM NLS_DATABASE_PARAMETERS;

6)对于AMERICAN_AMERICA.AL32UTF8字符集,一个汉字占三个字节,一个字母、数据或特殊字符占一个字节(实验显示)

根据以上六点需要明确的知识点,上面报错的原因就一目了然了!

参考:

1:http://www.2cto.com/database/201304/203337.html

2:http://blog.sina.com.cn/s/blog_69e55cc20100svty.html

3:http://www.oracle-base.com/articles/9i/character-semantics-and-globalization-9i.php

前台页面验证中需要注意的一个与VARCHAR2(N BYTE)和VARCHAR2(N CHAR)的小细节,布布扣,bubuko.com

时间: 2024-10-12 22:37:28

前台页面验证中需要注意的一个与VARCHAR2(N BYTE)和VARCHAR2(N CHAR)的小细节的相关文章

获取前台页面中的值,将获取到的值传到后台,做简单的登录验证(不与数据库关联)

思路:利用jQuery的AJAX 前台代码: 1 <body> 2 <form id="form1" runat="server"> 3 <div> 4 <table> 5 <tr> 6 <td>用户名:</td> 7 <td> 8 <input type="text" id="name" name="Usernam

使用spring webflow,在前台页面中如何显示后端返回的错误信息

刚刚接触spring webflow,相关的资料并不是很多,并且大都是那种入门的 .xml文件的配置. 用到的CAS 最新的4.0版本用的就是web-flow流,前台页面使用的是表单提交.于是我就碰到了一个问题,问题描述如下: 第一次输入错误的用户名密码提示用户名密码错误,第二次输入了正确的用户名和密码仍然报错,校验不通过. 在使用cas之前的登录页面如果输入用户名和密码错误的话,会弹出alert提示框,这个是使用ajax请求实现的.而ajax请求的一般都是那种spring mvc的contro

EF更新,数据库值变化,前台页面并不变化,刷新也不变化,重新运行程序则变化----开发中遇到的问题(已解决)

首先说一下我遇到这个情况的代码情景,首先上错误代码 UserInfo userInfo = Session["UserInfo"] as UserInfo; var attentionTopicInfos = userInfo.TopicInfos.Where(t => t.TopicId > 0); 这段代码所呈现的问题正如题目,数据库值变化,前台页面并不变化,刷新也不变化,重新运行程序则变化. 断点调试----看到无论如何更新,查出来的attentionTopicInf

为KindEditor编辑器中的内容增加样式,使得自定义前台页面显示效果与编辑器效果一致

KindEditor 本身自带有一定的样式,且为内部样式,在使用过程中,难免会发现部分效果不是我们想要的,因此,KindEditor提代了两种方式供使用着调用 1.内部样式,通过 cssData 属性,控制内容样式,如: K.create('textarea[name=content]', { cssData : 'body { font-size: 14px; }' }); 2.外部样式,通过 cssPath 属性,控制内容样式,如: K.create('textarea[name=conte

为KindEditor编辑器中的内容添加样式,使得自己定义前台页面显示效果与编辑器效果一致

KindEditor 本身自带有一定的样式,且为内部样式,在使用过程中,难免会发现部分效果不是我们想要的,因此.KindEditor提代了两种方式供使用着调用 1.内部样式.通过 cssData 属性,控制内容样式,如: K.create('textarea[name=content]', { cssData : 'body { font-size: 14px; }' }); 2.外部样式,通过 cssPath 属性.控制内容样式.如: K.create('textarea[name=conte

Get Selected List Value ——获取页面中被选中的一个下拉列表的value值

Get  Selected  List  Value:获取页面中被选中的一个下拉列表的value值 该关键字接收[  locator  ]一个参数,locator可以通过id或者name等进行定位. ============================================================== Open  Browser      https://www.baidu.com/?tn=sitehao123&H123Tmp=nunew11    chrome ${Val

java工程积累——前台页面的统一校验

在项目中,我们面临这样的问题,就是如果在前台做抽象,大家想想后台代码的抽象,我们耳熟能详,但是前台的抽象,我们是如何做的呢?恐怕这个问题,如果是第一次抛给自己,自己也很惶恐,就是,我们不是对应一个业务写好一个页面吗?以前从来没有想过抽象,这里,我就要说,那是咱们最初级的方式,今天带大家一起见证先比较靠谱一种方式! 回顾 我们回顾下html编码的历程,在web1.0时代,我们面向的大多是静态页面,这时候,能够展示出来就好,由于网速的限制,电脑处理能力的约束,我们只能把什么都写在一起,但是随着时间的

访问前台页面${pageContext.request.contextPath}/el表达式失效问题解决

访问前台页面${pageContext.request.contextPath}/el表达式失效问题解决 2017年05月09日 10:54:18 AinUser 阅读数:922 标签: el表达式404isELIgnoredpageContext解析 更多 个人分类: Error实例 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/AinUser/article/details/71439806 最近在做项目整合这个问题,然后在项目整合的时候,

github上搭建网站前台页面

其实就是把html页面提交到github,为了能在线演示: 1. 首先在github网站找到你的项目 2. 点击设置 3. 找到这几个选项,选择master branch打钩,然后保存 4. 然后就会提示你,你的网站可以发布了,地址就是后面那个,图中myweb是我的一个库也就是文件夹的名字,你想打开里面的哪个网页,就在后面加上网页的名字xxx.html就可以了,so easy! 说明:github只能显示前台页面,后台逻辑是没有的,所以只能用于展示页面,数据库操作是不支持的.