亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL中數據類型的驗證

2024-07-24 13:09:03
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了MySQL中數據類型的驗證 的相關資料,需要的朋友可以參考下
 

CHAR

char (M) M字符,長度是M*字符編碼長度,M最大255。

驗證如下:

mysql> create table t1(name char(256)) default charset=utf8;ERROR 1074 (42000): Column length too big for column 'name' (max = 255); use BLOB or TEXT insteadmysql> create table t1(name char(255)) default charset=utf8;Query OK, 0 rows affected (0.06 sec)mysql> insert into t1 values(repeat('整',255));Query OK, 1 row affected (0.00 sec)mysql> select length(name),char_length(name) from t1;+--------------+-------------------+| length(name) | char_length(name) |+--------------+-------------------+| 765 | 255 |+--------------+-------------------+1 row in set (0.00 sec) 

VARCHAR

VARCHAR(M),M同樣是字符,長度是M*字符編碼長度。它的限制比較特別,行的總長度不能超過65535字節。

mysql> create table t1(name varchar(65535));ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBsmysql> create table t1(name varchar(65534));ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBsmysql> create table t1(name varchar(65533));ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBsmysql> create table t1(name varchar(65532));Query OK, 0 rows affected (0.08 sec) 

注意,以上表的默認字符集是latin1,字符長度是1個字節,所以對于varchar,最大只能指定65532字節的長度。

如果是指定utf8,則最多只能指定21844的長度

mysql> create table t1(name varchar(65532)) default charset=utf8;ERROR 1074 (42000): Column length too big for column 'name' (max = 21845); use BLOB or TEXT insteadmysql> create table t1(name varchar(21845)) default charset=utf8;ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBsmysql> create table t1(name varchar(21844)) default charset=utf8;Query OK, 0 rows affected (0.07 sec) 

注意:行的長度最大為65535,只是針對除blob,text以外的其它列。

mysql> create table t1(name varchar(65528),hiredate datetime) default charset=latin1;ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBsmysql> create table t1(name varchar(65527),hiredate datetime) default charset=latin1;Query OK, 0 rows affected (0.01 sec) 

確實,datetime占了5個字節。

TEXT,BLOB

mysql> create table t1(name text(255));Query OK, 0 rows affected (0.01 sec)mysql> create table t2(name text(256));Query OK, 0 rows affected (0.01 sec)mysql> show create table t1/G*************************** 1. row ***************************Table: t1Create Table: CREATE TABLE `t1` (`name` tinytext) ENGINE=InnoDB DEFAULT CHARSET=latin11 row in set (0.00 sec)mysql> show create table t2/G*************************** 1. row ***************************Table: t2Create Table: CREATE TABLE `t2` (`name` text) ENGINE=InnoDB DEFAULT CHARSET=latin11 row in set (0.00 sec) 

通過上面的輸出可以看出text可以定義長度,如果范圍小于28(即256)則為tinytext,如果范圍小于216(即65536),則為text, 如果小于224,為mediumtext,小于232,為longtext。

上述范圍均是字節數。

如果定義的是utf8字符集,對于text,實際上只能插入21845個字符

mysql> create table t1(name text) default charset=utf8;Query OK, 0 rows affected (0.01 sec)mysql> insert into t1 values(repeat('整',21846));ERROR 1406 (22001): Data too long for column 'name' at row 1mysql> insert into t1 values(repeat('整',21845));Query OK, 1 row affected (0.05 sec) 

DECIMAl

關于Decimal,官方的說法有點繞,

Values for DECIMAL (and NUMERIC) columns are represented using a binary format that packs nine decimal (base 10) digits into four bytes. Storage for the integer and fractional parts of each value are determined separately. Each multiple of nine digits requires four bytes, and the “leftover” digits require some fraction of four bytes. The storage required for excess digits is given by the following table. 

還提供了一張對應表

MySQL,數據類型

對于以上這段話的解讀,有以下幾點:

1. 每9位需要4個字節,剩下的位數所需的空間如上所示。

2. 整數部分和小數部分是分開計算的。

譬如 Decimal(6,5),從定義可以看出,整數占1位,整數占5位,所以一共占用1+3=4個字節。

如何驗證呢?可通過InnoDB Table Monitor

如何啟動InnoDB Table Monitor,可參考:http://dev.mysql.com/doc/refman/5.7/en/innodb-enabling-monitors.html

mysql> create table t2(id decimal(6,5));Query OK, 0 rows affected (0.01 sec)mysql> create table t3(id decimal(9,0));Query OK, 0 rows affected (0.01 sec)mysql> create table t4(id decimal(8,3));Query OK, 0 rows affected (0.01 sec)mysql> CREATE TABLE innodb_table_monitor (a INT) ENGINE=INNODB;Query OK, 0 rows affected, 1 warning (0.01 sec) 

結果會輸出到錯誤日志中。

查看錯誤日志:

MySQL,數據類型

對于decimal(6,5),整數占1位,小數占5位,一共占用空間1+3=4個字節

對于decimal(9,0),整數部分9位,每9位需要4個字節,一共占用空間4個字節

對于decimal(8,3),整數占5位,小數占3位,一共占用空間3+2=5個字節。

至此,常用的MySQL數據類型驗證完畢~

對于CHAR,VARCHAR和TEXT等字符類型,M指定的都是字符的個數。對于CHAR,最大的字符數是255。對于VARCHAR,最大的字符數與字符集有關,如果字符集是latin1,則最大的字符數是65532(畢竟每一個字符只占用一個字節),對于utf8,最大的字符數是21844,因為一個字符占用三個字節。本質上,VARCHAR更多的是受到行大小的限制(最大為65535個字節)。對于TEXT,不受行大小的限制,但受到自身定義的限制。



注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品美女国产在线| 国模视频一区二区三区| 5566成人精品视频免费| 国产一区二区三区在线观看视频| 久久久亚洲福利精品午夜| 精品色蜜蜜精品视频在线观看| 久久91亚洲精品中文字幕奶水| 欧美日韩国产va另类| 国内偷自视频区视频综合| 亚洲午夜av久久乱码| 欧美亚洲国产成人精品| 欧美黄色三级网站| 一本色道久久88综合日韩精品| 精品亚洲一区二区三区在线播放| 欧美精品在线观看| 久久久久日韩精品久久久男男| 中文字幕精品久久久久| 一区二区三区www| 欧美激情xxxx性bbbb| 在线激情影院一区| 欧美性xxxxxxx| 国产成人精品一区二区三区| 久久精品国产69国产精品亚洲| 亚洲裸体xxxx| 91理论片午午论夜理片久久| 国产精品中文字幕在线观看| 国产偷国产偷亚洲清高网站| 欧美重口另类videos人妖| 668精品在线视频| 91sa在线看| 亚洲老司机av| 91系列在线播放| 欧美日韩在线观看视频| 国语自产在线不卡| 成人久久久久久久| 国产精品一区二区三区成人| 欧美xxxwww| 97超级碰碰碰| 欧美性猛交xxxx免费看久久久| 欧美日韩成人在线观看| 在线成人激情黄色| 亚洲欧美另类人妖| 亚洲午夜久久久久久久| 九九热这里只有精品6| 欧美亚洲激情在线| 亚洲国产精品电影| 日本伊人精品一区二区三区介绍| 超碰97人人做人人爱少妇| 国产一区红桃视频| 日本精品久久久久久久| 欧美激情视频免费观看| 成年无码av片在线| 国产精品一区二区久久久久| 亚洲精品一区中文| 亚洲人成77777在线观看网| 欧美电影《睫毛膏》| 91精品久久久久久久久| 浅井舞香一区二区| 亚洲国产成人精品女人久久久| 9.1国产丝袜在线观看| 久久免费视频这里只有精品| 2018日韩中文字幕| 久久久久久12| 国产精品扒开腿做爽爽爽视频| 亚洲欧洲偷拍精品| 精品国产精品三级精品av网址| 日韩有码在线播放| 欧美裸身视频免费观看| 国产精品高清免费在线观看| 91欧美日韩一区| 日韩精品视频在线观看网址| 亚洲欧洲美洲在线综合| 精品中文字幕乱| 美女福利视频一区| 欧美在线中文字幕| 777精品视频| 国产精品27p| 亚洲免费一在线| 国产婷婷色综合av蜜臀av| 国内精品久久久久久| 美女999久久久精品视频| 精品国产乱码久久久久久天美| 国内精品伊人久久| 欧美激情在线观看视频| 国产精品白丝av嫩草影院| 亚洲美女免费精品视频在线观看| 国产美女精品视频| 深夜福利一区二区| 欧美日韩免费观看中文| 亚洲国产精久久久久久| 久久久国产视频91| 国产视频精品自拍| 91久久在线视频| 国产日韩视频在线观看| 日韩av成人在线| 欧美久久久精品| 日韩精品免费在线播放| 久热99视频在线观看| 欧美成人免费va影院高清| 欧美亚洲午夜视频在线观看| 欧美性生交大片免费| 亚洲精品国偷自产在线99热| 久久免费视频网站| 亚洲天堂av网| 亚洲精品suv精品一区二区| 95av在线视频| 亚洲男人的天堂在线| 亚洲天堂av网| 国产精品夜色7777狼人| 亚洲国产成人久久综合一区| 正在播放欧美一区| 亚洲精品视频中文字幕| 亚洲精品久久久久久久久久久久久| 久久亚洲国产精品| 日韩最新中文字幕电影免费看| 亚洲一区二区三区毛片| 成人在线国产精品| 8x海外华人永久免费日韩内陆视频| 国产91精品不卡视频| 国产成人一区二区三区小说| 中文字幕日韩高清| 国产欧美日韩中文| 国产国产精品人在线视| 日本a级片电影一区二区| 97超级碰碰碰久久久| 亚洲精品一区二三区不卡| 亚洲**2019国产| 91免费高清视频| 国产suv精品一区二区三区88区| 欧美成年人视频网站欧美| 一区二区欧美亚洲| 国产噜噜噜噜久久久久久久久| 秋霞成人午夜鲁丝一区二区三区| 久久综合伊人77777| 国产欧美日韩精品专区| 欧美在线亚洲一区| 国产高清视频一区三区| 国产精品男人爽免费视频1| 欧美成人精品一区二区三区| 午夜精品美女自拍福到在线| 精品久久中文字幕久久av| 亚洲精品天天看| 成人黄色在线观看| 精品国产欧美一区二区五十路| 欧美在线性视频| 国产精品视频网| 日韩午夜在线视频| 亚洲国产精品成人一区二区| 久久香蕉国产线看观看网| 亚洲精品久久久久久久久| 欧美极品少妇全裸体| 日韩激情视频在线| 国产一区二区三区直播精品电影| 亚洲国产精品99久久| 日本不卡视频在线播放| 亚洲欧美日韩精品久久亚洲区| 91色视频在线导航| 精品福利视频导航| 欧美大尺度电影在线观看| 中文日韩在线观看| 久久久久久av| 一本色道久久88综合亚洲精品ⅰ| 97视频免费在线看| 欧美自拍视频在线观看|