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字节。
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个字节,所以对于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 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个字节。
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。
上述范围均是字节数。
如果定义的是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
关于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.
还提供了一张对应表
对于以上这段话的解读,有以下几点:
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)
结果会输出到错误日志中。
查看错误日志:
对于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,不受行大小的限制,但受到自身定义的限制。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]