varchar(100) 存储多少个汉字,多少个数字 具体还是要看版本的
4.0版本以下(生产环境中基本不用),varchar(100),指的是100字节,如果存放UTF8汉字时,只能存33个(每个汉字3字节)
5.0版本以上,varchar(100),指的是100字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放100个(字符串类型这个宽度才真的用上了), VARCHAR(M)
类型的列最多可以占用65535
个字节。
示例:以5.0以上版本为例。
新建表:
CREATE TABLE varchar_test (
`id` int(11) NOT NULL ,
`string` varchar(20)
) ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
插入数据:
INSERT INTO varchar_test (id, string) VALUES (1, '一二三四五六七八九十');
INSERT INTO varchar_test (id, string) VALUES (2, '一二三四五六七八九十一二三四五六七八九十');
INSERT INTO varchar_test (id, string) VALUES (3, '12345678901234567890');
测试结果:
1:一二三四五六七八九十
2:一二三四五六七八九十一二三四五六七八九十
3:12345678901234567890
如果插入字符超过21个,则报错 [Err] 1406 - Data too long
for
column
'string'
at
row 1
可见MySQL的varchar(n)可以存储的中文字符数和英文字符数是一致的,都是n个字符
------------------------------------------------------------------------------------------------------------------------------------------
bigint(20)中20指的是该字段下能显示的最大数字长度。
整数类型,这里显示的宽度和数据类型的取值范围是没有任何关系的,显示宽度只是指明Mysql最大可能显示的数字个数,数值的位数小于指定的宽度时会由空格填充;如果插入了大于显示宽度的值,只要该值不超过该类型的取值范围,数值依然可以插入且能够显示出来(只是显示位数不完全)。如果你不设置宽度,系统将添加默认的宽度tinyint(4),smallint(6),mediumint(9),int(11),bigint(20),这些默认的宽度是跟该类型的取值范围长度相关。
演示
1、bigint(10)和bigint(20)的区别在于如果表定义加上zerofill后再客户端显示长度不同,如下:
drop table test2;
create table test2 (id bigint(10) zerofill,id1 bigint(20) zerofill);
insert into test2 values(9223372036854775807,9223372036854775807);
select * from test2;
-- 结果
-- id id1
-- 922337203685(多两位是撒情况) 09223372036854775807
2、如果在创建bigint字段时,不指定长度,则默认长度为20,如下:
create table test3 (id bigint);
show create table test3;
--
test3 CREATE TABLE `test3` (
`id` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
3、无论是bigint(10),还是bigint(20)均占用8个字节,int和tinyinit类型类似。
首先我们看bigint, MySQL的整型类型有这样几种:
类型 存储占用字节
tinyint 1
smallint 2
mediumint 3
int 4
bigint 8
tinyint(M) M默认为4;
SMALLINT(M) M默认为6;
MEDIUMINT(M) M默认为9;
INT(M) M默认为11;
BIGINT(M) M默认为20. M表示最大显示宽度, 建表若设置了zerofill(0填充),不足长度的会在数字前面补充0,超出长度的将会截取显示