日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/6/17 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前台页面验证中需要注意的一个与VARCHAR2(N BYTE)和VARCHAR2(N CHAR)的小细节 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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)的小细节的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。