日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

mysql中数据类型的长度

發布時間:2025/3/12 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql中数据类型的长度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、varchar(n)、char(n)中的n的含義

1)varchar(m),char(n)里面的m或n代表的是字符的個數。

打開mysql手冊,看到這樣一句話 The CHAR and VARCHAR types are declared with a length that indicates the maximum number of characters you want to store. For example, CHAR(30) can hold up to 30 characters.

注意加粗的單詞,手冊中明確指出,存放的是字符的個數。

例如:varchar(30)中30的涵義:最大存儲30個字符;varchar(5)和(200)存儲hello所占空間一樣,但后者在排序時會消耗更多內存,因為order by col采用fixed_length計算col長度。

2):varchar(m),char(n)里面的m和n是否有長度限制?分別是多少?

首先我們明確一下,m和n是一定會有長度限制的。那么究竟是多少呢?這個問題需要我們詳細看一下各個知識點。

第一:討論char(n)

The length of a CHAR column is fixed to the length that you declare when you create the table. The length can be any value from 0 to 255. When CHAR values are stored, they are right-padded with spaces to the specified length.When CHAR values are retrieved, trailing spaces are removed unless the PAD_CHAR_TO_FULL_LENGTH [581]SQL mode is enabled.

手冊中指出,長度的限制是0-255,經過驗證,長度的限制是0-255個字符。也就是說,沒有明確標出字節的限制數。

第二:討論varchar(m)

Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 65,535.The effective maximum length of a VARCHARis subject to the maximum row size (65,535 bytes, which is shared among all columns) and the character set used. See Section E.10.4, “Table Column-Count and Row-Size Limits”.

In contrast to CHAR, VARCHAR values are stored as a 1-byte or 2-byte lengthprefix plus data. The length prefix indicates the number of bytes in the value. A column uses one length byte if values require no more than 255 bytes,two length bytes if values may require more than 255 bytes.

注意上面兩段話中的加粗部分。

首先我們明確,m也是字符的個數。而上面句子中提到的65535是指varchar列最大可存放的字節數。

我們知道,在gbk編碼格式下,字節數=字符數*2 ;在utf8編碼格式下,字節數=字符數*3 【*中文情況下】

但是,在varchar中,因為是變長,所以需要1-2個字節來標識這一列的長度。如果varchar字段定義中帶有default null允許列空,則需要需要1bit來標識,每8個bits的標識組成一個字段。一張表中存在N個varchar字段,那么需要(N+7)/8 (取整)bytes存儲所有的NULL標識位。

我們假設一張表只有varchar一列,且此時該字段設置為DEFAULT NULL,那么該varchar字段的最大長度為65535-2-(1+7)/8 = 65532bytes.

這時候新的疑問出現了。為什么要假設表只有一列數據,這是很不符合常規的。原因在上面描紫的語句。

什么意思?

我們要知道,每一行數據的總長度是有限制的,每一行最大字節數就是65535個。我們創建一張表時,需要把每個字段需要占用的字節進行統計,總數不能超過65535即可。其中text和blob根據存放的數據量不同可能占用1,2,3,4個字節。在計算的時候要按4字節進行計算。

*3)、int(20)中20的涵義
20表示最大顯示寬度為20,但仍占4字節存儲,存儲范圍不變;

create table int_test(a int zerofill NOT NULL auto_increment, PRIMARY KEY (a)); create table int_test_4(a int(4) zerofill NOT NULL auto_increment, PRIMARY KEY (a));select * from int_test; +------------+ | a | +------------+ | 0000000001 | | 0000000002 | | 0000000003 | | 2147483648 | +------------+select * from int_test_4; +------------+ | a | +------------+ | 0001 | | 0002 | | 0003 | | 2147483648 | +------------+

二、mysql中數據類型的長度

(1)字符類型

類型大小范圍(有符號)范圍(無符號)用途
TINYINT1 字節(-128,127)(0,255)小整數值
SMALLINT2 字節(-32 768,32 767)(0,65 535)大整數值
MEDIUMINT3 字節(-8 388 608,8 388 607)(0,16 777 215)大整數值
INT或INTEGER4 字節(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整數值
BIGINT8 字節(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)極大整數值
FLOAT4 字節(-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)單精度 浮點數值
DOUBLE8 字節(1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)雙精度 浮點數值
DECIMAL對DECIMAL(M,D) ,如果M>D,為M+2否則為D+2依賴于M和D的值依賴于M和D的值小數值

2)字符類型

CHAR參見上面的討論定長字符串
VARCHAR參見上面的討論變長字符串
TINYTEXT0-255字節短文本字符串
TEXT0-65 535字節長文本數據
MEDIUMTEXT0-16 777 215字節中等長度文本數據
LONGTEXT0-4 294 967 295字節極大文本數據

3)枚舉集合類型

ENUM (最多65535個成員) 64KB
SET (最多64個成員) 64KB

4)二進制數據類型

TINYBLOB0-255字節不超過 255 個字節的二進制字符串
BLOB0-65 535字節二進制形式的長文本數據,最大64k
MEDIUMBLOB0-16 777 215字節二進制形式的中等長度文本數據,最大16M
LOGNGBLOB0-4 294 967 295字節二進制形式的極大文本數據,最大4GB

5)時間類型

類型大小 (字節)范圍格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3‘-838:59:59’/‘838:59:59’HH:MM:SS時間值或持續時間
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和時間值
TIMESTAMP81970-01-01 00:00:00/2037 年某時YYYYMMDD HHMMSS混合日期和時間值,時間戳

總結

以上是生活随笔為你收集整理的mysql中数据类型的长度的全部內容,希望文章能夠幫你解決所遇到的問題。

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