1:一个小的测试实例

CREATE TABLE SALES.TEST_
(TEST_BYTE     VARCHAR2(5 BYTE),TEST_CHAR     VARCHAR2(5 CHAR)
)--TABLE CREATEDINSERT INTO TEST_ (TEST_CHAR) VALUES('12345')--1 ROW INSERTEDINSERT INTO TEST_ (TEST_BYTE) VALUES('12345')--1 ROW INSERTEDINSERT INTO TEST_ (TEST_CHAR) VALUES('abcde')--1 ROW INSERTEDINSERT INTO TEST_ (TEST_BYTE) VALUES('abcde')--1 ROW INSERTEDINSERT INTO TEST_ (TEST_CHAR) VALUES('@#$%&')--1 ROW INSERTEDINSERT INTO TEST_ (TEST_BYTE) VALUES('@#$%&')--1 ROW INSERTEDINSERT INTO TEST_ (TEST_CHAR) VALUES('1a@_好')--1 ROW INSERTEDINSERT INTO TEST_ (TEST_BYTE) VALUES('1a@_好')--ORA-12899: value too large for column "SALES"."TEST_"."TEST_BYTE" (actual: 7, maximum: 5)INSERT INTO TEST_ (TEST_CHAR) VALUES('一二三四五')--1 ROW INSERTEDINSERT 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

转载于:https://www.cnblogs.com/godtrue/p/3782443.html

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

  1. JS前台页面验证文本框非空

    效果图: 代码: 源代码: <script type="text/javascript"> function check(){ var xm = document.ge ...

  2. 整理在小程序页面样式中引入阿里巴巴字体图标

    整理在小程序页面样式中引入阿里巴巴字体库 1.登录阿里巴巴字体图标 2.在小程序项目中配置 1.登录阿里巴巴字体图标 点我阿里巴巴字体图标库 搜索需要的字体图标 将需要的字体图标点击添加到购车中 添加 ...

  3. php定时执行任务 回调,如何在php中基于workerman实现一个定时任务

    如何在php中基于workerman实现一个定时任务 发布时间:2021-02-15 18:56:14 来源:亿速云 阅读:92 作者:Leah 这篇文章将为大家详细讲解有关如何在php中基于work ...

  4. 软件开发中 前台、中台、后台英文_一个微服务业务系统的中台构建之路

    中台是近两年软件开发领域的热点话题,相关的文章也成为了各个技术社区和媒体争相报道的网红内容.作为企业支撑业务开发的核心系统,中台的重要性不言而喻,很多企业也开始尝试中台的构建和落地工作.Biz-UI ...

  5. sql checksum_SQL Server中的CHECKSUM页面验证

    sql checksum CHECKSUM is an option for page verification that is available at the database instance ...

  6. 在微信小程序中怎么让一个页面的信息传递到另一个页面

    首先需要在前台搭建好需要展示的那个页面. <!--pages/login/login.wxml--> <view class='nav'>输入个人信息</view> ...

  7. 关于表单验证中成功则跳转到指定页面否则不跳转的问题

    关于表单验证中成功则跳转到指定页面否则不跳转的问题 之前学习HTML的时候会涉及到一些JavaScript的基础知识,其中就有表单验证问题,当时很郁闷的是,不管表单验证是否通过,它都会跳转到指定页面. ...

  8. 详解html和thymeleaf中的相对路径,解决springboot前台页面的相对路径问题

    一.问题 最近在使用springboot框架,众所周知,该框架可以直接以jar的方式运行,在该方式运行的情况下,默认contextPath是/.在前台页面引用的时候,我是这样写相对路径的: 后台Req ...

  9. jquery中输入验证中一个不错的效果

    在表单的输入验证中,经常要当用户没能正确输入后,要提示"XXXX输入错误" 这一类的信息,如何能搞到动态一点呢,今天发现jquery中的一个不错的效果,笔记之. 1 包含jquer ...

最新文章

  1. BEM 实战之微信个人页面
  2. ansible for devops读书笔记第一章
  3. eclipse中将一个项目作为library导入另一个项目中
  4. AWD-LSTM为什么这么棒? 1
  5. 已免押1000亿!芝麻信用:靠信用出去浪
  6. 怎么用python打开csv文件_使用Python从CSV文件读取数据
  7. Python with 结构
  8. cpu(s)和%CPU的的区别
  9. 计算机网络安全重要性
  10. python游戏源码——2绘画简易坦克
  11. PIL IndexError: index out of range
  12. HCI实验spss数据分析
  13. python将图片转换为csv
  14. vue中单选框设置默认选中值
  15. 360P2建html网站,360P2刷机
  16. 关闭计算机的几种方法
  17. cv_bridge与python版本问题导致编译错误error: return-statement with no value, in function returning ‘void*’ [-fpe
  18. Win Server版本去掉登陆密码
  19. 【θntldr is missing怎么解决θntldr丢失的解决办法θ】
  20. 电感、电阻与温度的对应函数关系

热门文章

  1. C# 给枚举类型增加一个备注特性
  2. RestTemplate--解决中文乱码
  3. MIT python 第二课第四十分钟 取最小值的例子
  4. 【流媒體】jrtplib—VS2010 下RTP开源协议库JRTPLIB3.9.1编译
  5. asp.net performance
  6. 怎样做反向域名解析?
  7. CentOS搭建本地光盘YUM源
  8. 白钢条用什么可以切割_错怪李佳琦了!原来用小苏打刷牙,1个月真的可以白4度,太心动了...
  9. python 微积分_《用 Python 学微积分》笔记 2
  10. UVA11019KMP(二维矩阵匹配出现次数)