成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

MySQL中需要注意的字段長度問題

在MySQL的表結(jié)構(gòu)設(shè)計(jì)中,突然想起來幾個(gè)地方碰到的問題比較多,大體來說一個(gè)就是字符集,一個(gè)就是數(shù)據(jù)類型。

為交口等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及交口網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、網(wǎng)站制作、交口網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

而字符集和數(shù)據(jù)類型結(jié)合起來,就有一個(gè)蠻有意思的細(xì)節(jié),那就是行長度的問題。

比如我們創(chuàng)建一個(gè)表使用了varchar的類型,如果指定為gbk,表里含有一個(gè)字段,可以指定為32766字節(jié),如果再長一些就不行了。

其中的計(jì)算方式就需要理解了,因?yàn)関arhcar類型長度大于255,所以需要2個(gè)字節(jié)存儲(chǔ)值的長度,而MySQL里面的頁的單位是16k,使用了IOT的方式來存儲(chǔ)。所以如果超過了這個(gè)長度,那就會(huì)有溢出的情況,和Oracle的overflow很類似。

所以對于gbk類型,行長度最大為65535,則varchar列的最大長度算法就是 (65535-2)/2 =32766.5,所以此處就是32766了。

> create table test_char(v varchar(32766)) charset=gbk;
Query OK, 0 rows affected (0.00 sec)
> create table test_char1(v varchar(32767)) charset=gbk;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs而另外一種字符集,也是默認(rèn)的字符集latin1,有些系統(tǒng)支持火星文的還是會(huì)喜歡用這種字符集。

它的長度就不一樣了,對應(yīng)是1字節(jié),所以varchar(32767)是沒有任何問題的,而最大長度就是65532了。
> create table test_char1(v varchar(32767)) charset=latin1;
Query OK, 0 rows affected (0.01 sec)
> create table test_char2(v varchar(65535)) charset=latin1;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs而對于utf8還是有很大的差別,對應(yīng)的是3個(gè)字節(jié),所以需要除以3,按照(65535-2)/3,最大值就是21844了。
> create table test_char2(v varchar(21844)) charset=utf8;    
Query OK, 0 rows affected (0.00 sec)
> create table test_char3(v varchar(21845)) charset=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs上面的場景相對來說會(huì)有一些局限性,那么我們引入表結(jié)構(gòu)的設(shè)計(jì)。

如果是gbk字符集,含有下面的幾個(gè)字段,則memo字段的varchar類型最大長度是多少?

> create table test_char3(id int,name varchar(20),memo varchar(32766)) charset=gbk;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs

這個(gè)問題還是如法炮制,應(yīng)用之前的計(jì)算方式,數(shù)值型是4個(gè)字節(jié),字符型乘以2,含有字符型的長度小于255,所以減去1即可,這樣下來就是(65535-1-4-20*2-2)約等于32743

> create table test_char3(id int,name varchar(20),memo varchar(32744)) charset=gbk;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOB兩種測試結(jié)果可以簡單對比一下。
> create table test_char3(id int,name varchar(20),memo varchar(32743)) charset=gbk;
Query OK, 0 rows affected (0.01 sec)
select (65535-1-4-20*2-2)/2;
+----------------------+
| (65535-1-4-20*2-2)/2 |
+----------------------+
|           32744.0000 |
+----------------------+
1 row in set (0.00 sec)

整個(gè)過程還是需要考慮到這些點(diǎn)的,否則前期不夠重視,在后面去做擴(kuò)展的時(shí)候就會(huì)有很大的限制。

新聞標(biāo)題:MySQL中需要注意的字段長度問題
網(wǎng)頁網(wǎng)址:http://jinyejixie.com/article6/pgipig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、用戶體驗(yàn)、品牌網(wǎng)站設(shè)計(jì)品牌網(wǎng)站建設(shè)、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
彰化县| 长阳| 太保市| 南岸区| 海南省| 承德市| 白城市| 亳州市| 英超| 新平| 平武县| 岱山县| 商洛市| 深圳市| 鄂尔多斯市| 忻州市| 金门县| 石渠县| 昌都县| 普兰店市| 阳新县| 遵化市| 胶南市| 鹿邑县| 津南区| 兴城市| 海城市| 萝北县| 嘉定区| 乌兰察布市| 龙南县| 准格尔旗| 五常市| 饶阳县| 钦州市| 峡江县| 黄大仙区| 中卫市| 慈利县| 林口县| 东方市|