最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中數(shù)據(jù)類型的驗證

 更新時間:2016年04月13日 11:10:33   作者:iVictor  
這篇文章主要介紹了MySQL中數(shù)據(jù)類型的驗證 的相關(guān)資料,需要的朋友可以參考下

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 instead
mysql> 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字節(jié)。

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 BLOBs
mysql> 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 BLOBs
mysql> 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 BLOBs
mysql> create table t1(name varchar(65532));
Query OK, 0 rows affected (0.08 sec) 

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

如果是指定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 instead
mysql> 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 BLOBs
mysql> 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 BLOBs
mysql> create table t1(name varchar(65527),hiredate datetime) default charset=latin1;
Query OK, 0 rows affected (0.01 sec) 

確實,datetime占了5個字節(jié)。

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: t1
Create Table: CREATE TABLE `t1` (
`name` tinytext
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> show create table t2\G
*************************** 1. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`name` text
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec) 

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

上述范圍均是字節(jié)數(shù)。

如果定義的是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 1
mysql> insert into t1 values(repeat('整',21845));
Query OK, 1 row affected (0.05 sec) 

DECIMAl

關(guān)于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 “l(fā)eftover” digits require some fraction of four bytes. The storage required for excess digits is given by the following table. 

還提供了一張對應(yīng)表

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

1. 每9位需要4個字節(jié),剩下的位數(shù)所需的空間如上所示。

2. 整數(shù)部分和小數(shù)部分是分開計算的。

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

如何驗證呢?可通過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) 

結(jié)果會輸出到錯誤日志中。

查看錯誤日志:

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

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

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

至此,常用的MySQL數(shù)據(jù)類型驗證完畢~

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

相關(guān)文章

  • Mysql使用索引實現(xiàn)查詢優(yōu)化

    Mysql使用索引實現(xiàn)查詢優(yōu)化

    索引的目的在于提高查詢效率,本文給大家介紹Mysql使用索引實現(xiàn)查詢優(yōu)化技巧,涉及到索引的優(yōu)點等方面的知識點,非常不錯,具有參考借鑒價值,感興趣的朋友一起看下吧
    2016-07-07
  • mysql datetime查詢異常問題解決

    mysql datetime查詢異常問題解決

    這篇文章主要介紹了mysql datetime查詢異常問題解決的相關(guān)資料,這里對異常進行了詳細的介紹和該如何解決,需要的朋友可以參考下
    2016-11-11
  • Mysql主從GTID與binlog如何使用

    Mysql主從GTID與binlog如何使用

    MySQL的GTID和binlog是實現(xiàn)高效數(shù)據(jù)復(fù)制和恢復(fù)的重要機制,GTID保證事務(wù)的唯一標(biāo)識,避免復(fù)制沖突;binlog記錄數(shù)據(jù)變更,用于主從復(fù)制和數(shù)據(jù)恢復(fù),兩者配合,提高MySQL復(fù)制的準確性和管理便捷性
    2024-10-10
  • Mysql桌面工具之SQLyog資源及激活使用方法告別黑白命令行

    Mysql桌面工具之SQLyog資源及激活使用方法告別黑白命令行

    這篇文章主要介紹了Mysql桌面工具之SQLyog資源及激活使用方法告別黑白命令行,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Linux下安裝MySQL5.7.19問題小結(jié)

    Linux下安裝MySQL5.7.19問題小結(jié)

    第一次在自己虛機上安裝mysql 中間碰到很多問題 在這里記下來,特此分享到腳本之家平臺供大家參考
    2017-08-08
  • MySQL使用中遇到的問題記錄

    MySQL使用中遇到的問題記錄

    本文給大家匯總介紹了作者在mysql的使用過程中遇到的問題以及最終的解決方案,非常的實用,有需要的小伙伴可以參考下
    2017-11-11
  • mysql不包含模糊查詢問題

    mysql不包含模糊查詢問題

    這篇文章主要介紹了mysql不包含模糊查詢問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • mysql用戶權(quán)限管理實例分析

    mysql用戶權(quán)限管理實例分析

    這篇文章主要介紹了mysql用戶權(quán)限管理,結(jié)合實例形式分析了mysql用戶權(quán)限管理概念、原理及用戶權(quán)限的查看、修改、刪除等操作技巧,需要的朋友可以參考下
    2020-04-04
  • 一文詳解MySQL是如何解決幻讀的

    一文詳解MySQL是如何解決幻讀的

    事務(wù)A按照一定條件進行數(shù)據(jù)讀取,期間事務(wù)B插入了相同搜索條件的新數(shù)據(jù),事務(wù)A再次按照原先條件進行讀取操作修改時,發(fā)現(xiàn)了事務(wù)B新插入的數(shù)據(jù)稱之為幻讀,這篇文章主要給大家介紹了關(guān)于MySQL是如何解決幻讀的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • MySQL修改字符集的實戰(zhàn)教程

    MySQL修改字符集的實戰(zhàn)教程

    這篇文章主要介紹了MySQL修改字符集的方法,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-01-01

最新評論

永丰县| 泉州市| 大厂| 紫金县| 百色市| 广东省| 新兴县| 丰镇市| 开封市| 满城县| 綦江县| 台江县| 宁波市| 民勤县| 县级市| 临泉县| 随州市| 乐安县| 武清区| 大冶市| 马公市| 淮安市| 思南县| 门源| 景德镇市| 贞丰县| 新泰市| 襄城县| 南岸区| 璧山县| 通城县| 枣阳市| 罗田县| 封开县| 天长市| 丹棱县| 清远市| 金川县| 星子县| 当雄县| 唐河县|