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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

發(fā)布時間:2025/3/15 数据库 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

MySQL學(xué)習(xí)筆記_關(guān)于MySQL的字符類型VARCHAR長度知識總結(jié)

一.VARCHAR存儲和行長度限制

1.VARCHAR(N)中,N指的是字符的長度,VARCHAR類型最大支持65535,指的是65535個字節(jié),但并不支持65535長度的varchar,65535中應(yīng)該包含了所有字段的長度、變長字段長度標(biāo)示位、NULL標(biāo)示位的累計。其中內(nèi)容開頭用1到2個字節(jié)表示實際長度(長度超過255時需要2個字節(jié))。所以還有別的開銷,實際能存放的長度為65532.

(MySQL數(shù)據(jù)庫的varchar類型在5.0.3以下的版本中的最大長度限制為255,其數(shù)據(jù)范圍可以是0~255)

2.因為null標(biāo)示位占用了一個字節(jié),所以可以去掉not null限制。

?

3.MySQL要求一個行的定義長度不能超過65535 是指所有列的長度總和不能超過65535.如果列的長度總和超過這個長度,依然無法創(chuàng)建.

?

二.VARCHAR長度的編碼限制

1.概述

字符類型若為gbk,每個字符最多占2個字節(jié),最大長度不能超過32766;

字符類型若為utf8,每個字符最多占3個字節(jié),最大長度不能超過21845。

若定義的時候超過上述限制,則varchar字段會被強行轉(zhuǎn)為text類型,并產(chǎn)生warning。

2.舉例

(1)若一個表只有一個varchar類型,如定義為

create table t4(c varchar(N)) charset=gbk;

則此處N的最大值為(65535-1-2)/2= 32766。

減1的原因是實際行存儲從第二個字節(jié)開始’;

減2的原因是varchar頭部的2個字節(jié)表示長度;

除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個字節(jié);

減30*3的原因是char(30)占用90個字節(jié),編碼是utf8。

如果被varchar超過上述的b規(guī)則,被強轉(zhuǎn)成text類型,則每個字段占用定義長度為11字節(jié),當(dāng)然這已經(jīng)不是“varchar”了。

?

三.關(guān)于SQL模式

在MySQL中,SQL模式常用來解決下面幾類問題:

1.通過設(shè)置SQL Mode,可以完成不同嚴(yán)格程度的數(shù)據(jù)校驗,有效地保障數(shù)據(jù)準(zhǔn)確性。

2.通過設(shè)置SQL Mode為ANSI模式,來保證大多數(shù)SQL符合標(biāo)準(zhǔn)的SQL語法,這樣應(yīng)用在不同數(shù)據(jù)庫之間進行遷移時,則不需要對業(yè)務(wù)SQL進行較大的修改。

3.在不同數(shù)據(jù)庫之間進行數(shù)據(jù)遷移之前,通過設(shè)置SQL Mode可以使MySQL上的數(shù)據(jù)更方便地遷移到目標(biāo)數(shù)據(jù)庫中。

查看當(dāng)SQL模式

mysql>select @@sql_mode;

STRICT_TRANS_TABLES(嚴(yán)格模式) 實現(xiàn)數(shù)據(jù)的嚴(yán)格校驗,使錯誤數(shù)據(jù)不能插入表中.

如果將sql_mode設(shè)為'',則可能會出現(xiàn)可以建立表,但是會有一條警告信息,

mysql>set session sql_mode='';

mysql>create table test4(a varchar(25000)) charset=utf8;

mysql>show warnings;

警告信息提示了,之所以可以創(chuàng)建,是因為MySQL自動將VARCHAR轉(zhuǎn)換成了Text類型。

mysql>show create table test4;

?

附:

1.UTF8編碼介紹

http://zh.wikipedia.org/wiki/UTF8

2.查看字符集方法:

(1)查看MySQL數(shù)據(jù)庫服務(wù)器和數(shù)據(jù)庫MySQL字符集。

show variables like '%char%';?

(2)查看MySQL數(shù)據(jù)表(table)的MySQL字符集。

show table status from dbName where name='tableName';

(3)查看MySQL數(shù)據(jù)列(column)的MySQL字符集。

show full columns from tableName;

?

參考:http://dinglin.iteye.com/blog/914276

轉(zhuǎn)載于:https://www.cnblogs.com/huligong1234/archive/2012/06/20/2556651.html

總結(jié)

以上是生活随笔為你收集整理的MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。