冷月汉宫秋 发表于 2014-12-05 16:46

int(M),char(M),varchar(M)后面长度的含义!!!

本帖最后由 冷月汉宫秋 于 2014-12-05 16:47 编辑

   
   各位大牛们,请教一个问题,我实在是搞不清了这些字段类型后面的长度具体含义了。网上查找说是代表最大显示宽度,但是我测试了下,发现不管我int(M)的长度设为多少,插入长度都不能超过10,一旦超过,就报warning了!!
举例:



mysql> alter table t1 modify a int(1);
Query OK, 0 rows affected (0.00 sec)
Records: 0Duplicates: 0Warnings: 0

mysql> insert into t1 values(1234567890);
Query OK, 1 row affected (0.06 sec)

mysql> insert into t1 values(12345678901);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+--------------------------------------------+
| Level   | Code | Message                                    |
+---------+------+--------------------------------------------+
| Warning | 1264 | Out of range value for column 'a' at row 1 |
+---------+------+--------------------------------------------+
1 row in set (0.00 sec)

mysql> alter table t1 modify a int(255);
Query OK, 0 rows affected (0.00 sec)
Records: 0Duplicates: 0Warnings: 0

mysql> insert into t1 values(1234567890);
Query OK, 1 row affected (0.00 sec)

mysql> insert into t1 values(12345678901);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+--------------------------------------------+
| Level   | Code | Message                                    |
+---------+------+--------------------------------------------+
| Warning | 1264 | Out of range value for column 'a' at row 1 |
+---------+------+--------------------------------------------+
1 row in set (0.00 sec)

action08 发表于 2014-12-05 18:59

m就是长度啊,用mbyte字节存储

action08 发表于 2014-12-06 15:11

长度定义好了,越狱就是你自己的问题,程序继续跑

action08 发表于 2014-12-06 15:11

假如是银行账户也这么搞,会把公司赔死的

909413335 发表于 2014-12-10 12:20

int(M),char(M),varchar(M)后面长度的含义!!!

INT,占4个字节,一个字节8位,一共32位,能表示最大值是2的32次方,也就是21亿多,如果定义成无符号的,省掉一个符号标志位,可表示数字扩大一倍,到42亿多。
42 0000 0000 这就是10位数的,超过这个数就表示不了了。

CHAR,VARCHAR里面的,都是表示字符数。

这些东西在官方文档上都有明确说明的。

chengchow 发表于 2014-12-10 16:37

你定义的只是在这个字段里面,你每个数据占用的长度,超出为实际长度
不管多长,都不能超出int规定的范围

909413335 发表于 2014-12-11 12:03

1、1年以上全职MYSQL/REDIS DBA工作经验.
2、精通/熟悉MySQL数据库的运行机制和体系架构.
3、精通/熟悉MySQL数据库的管理,有丰富的故障处理经验优先.
4、熟悉linux操作系统的使用,有一定的运维经验.
5、熟悉shell/python编程,善于利用脚本解决重复问题
6、熟悉mysql/redis/mongodb的使用优化.
7、基础扎实,做事认真,善于总结,有想法,能承受压力
8、性格沉稳细致或者灵活有原则,愿意陪公司一起成长

工作地点:珠海魅族总部待遇面议,高于业界普通水平
面试过程:先QQ,电话面试,达成一致后到公司来面谈一下就可以定下来。
联系QQ:32416070,不是猎头。

ipx-spx 发表于 2014-12-12 11:39

本帖最后由 ipx-spx 于 2014-12-12 11:40 编辑

int(M)这是该字段将显示M位,int默认是4字节,即插入-2的32次方到+2的32次方-1,2亿多点,超过就没办法插入,会报错,因为默认的sql_mode的设置问题
char(M) 定长字段,表示该字段最多可以插入M个字符,varchar(M) 边长字段,表示可以插入M个字符
页: [1]
查看完整版本: int(M),char(M),varchar(M)后面长度的含义!!!