程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL學習筆記_關於MySQL的字符類型VARCHAR長度知識總結

MySQL學習筆記_關於MySQL的字符類型VARCHAR長度知識總結

編輯:MySQL綜合教程

MySQL學習筆記_關於MySQL的字符類型VARCHAR長度知識總結   一.VARCHAR存儲和行長度限制
  1.VARCHAR(N)中,N指的是字符的長度,VARCHAR類型最大支持65535,指的是65535個字節,但並不支持65535長度的varchar,65535中應該包含了所有字段的長度、變長字段長度標示位、NULL標示位的累計。其中內容開頭用1到2個字節表示實際長度(長度超過255時需要2個字節)。所以還有別的開銷,實際能存放的長度為65532. (MySQL數據庫的varchar類型在5.0.3以下的版本中的最大長度限制為255,其數據范圍可以是0~255)
wps_clip_image-1585
  2.因為null標示位占用了一個字節,所以可以去掉not null限制。   wps_clip_image-2415
  3.MySQL要求一個行的定義長度不能超過65535 是指所有列的長度總和不能超過65535.如果列的長度總和超過這個長度,依然無法創建.  www.2cto.com     wps_clip_image-4025
  二.VARCHAR長度的編碼限制
  1.概述 字符類型若為gbk,每個字符最多占2個字節,最大長度不能超過32766; 字符類型若為utf8,每個字符最多占3個字節,最大長度不能超過21845。 若定義的時候超過上述限制,則varchar字段會被強行轉為text類型,並產生warning。 2.舉例 (1)若一個表只有一個varchar類型,如定義為 create table t4(c varchar(N)) charset=gbk; 則此處N的最大值為(65535-1-2)/2= 32766。 減1的原因是實際行存儲從第二個字節開始’; 減2的原因是varchar頭部的2個字節表示長度; 除2的原因是字符編碼是gbk。 (2) 若一個表定義為 create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8; 則此處N的最大值為 (65535-1-2-4-30*3)/3=21812 減1和減2與上例相同; 減4的原因是int類型的c占4個字節; 減30*3的原因是char(30)占用90個字節,編碼是utf8。 如果被varchar超過上述的b規則,被強轉成text類型,則每個字段占用定義長度為11字節,當然這已經不是“varchar”了。  www.2cto.com     三.關於SQL模式 在MySQL中,SQL模式常用來解決下面幾類問題:
  1.通過設置SQL Mode,可以完成不同嚴格程度的數據校驗,有效地保障數據准確性。 2.通過設置SQL Mode為ANSI模式,來保證大多數SQL符合標准的SQL語法,這樣應用在不同數據庫之間進行遷移時,則不需要對業務SQL進行較大的修改。 3.在不同數據庫之間進行數據遷移之前,通過設置SQL Mode可以使MySQL上的數據更方便地遷移到目標數據庫中。 查看當SQL模式 mysql>select @@sql_mode;
wps_clip_image-10668
  STRICT_TRANS_TABLES(嚴格模式) 實現數據的嚴格校驗,使錯誤數據不能插入表中. 如果將sql_mode設為'',則可能會出現可以建立表,但是會有一條警告信息, mysql>set session sql_mode=''; mysql>create table test4(a varchar(25000)) charset=utf8; mysql>show warnings; 警告信息提示了,之所以可以創建,是因為MySQL自動將VARCHAR轉換成了Text類型。 mysql>show create table test4;   wps_clip_image-32465
  附: 1.UTF8編碼介紹 http://zh.wikipedia.org/wiki/UTF8 2.查看字符集方法:  www.2cto.com   (1)查看MySQL數據庫服務器和數據庫MySQL字符集。 show variables like '%char%';  (2)查看MySQL數據表(table)的MySQL字符集。 show table status from dbName where name='tableName'; (3)查看MySQL數據列(column)的MySQL字符集。 show full columns from tableName;   參考:http://www.BkJia.com/database/201206/136787.html
    作者 一片相思林

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved