MySQL 显示宽度
1. MySQL 数字类型默认有符号类型还是无符号类型?
答案:有符号类型
Numeric data types that permit the UNSIGNED attribute also permit SIGNED. However, these data types are signed by default, so the SIGNED attribute has no effect.
2. MySQL数字类型的取值范围
-w706
3. 数值类型的显示宽度
对于tinyint(M) 或者 int(M),M为其显示宽度。M对该列字段的存储范围没有半毛钱关系。
当该列定义为无符号类型时,其显示宽度M不起任何作用。换句话说int(11)
和 int(3)
没有任何区别。
当该列定义为ZEROFILL时,当数值位数大于M时,M不会起到任何作用。当数值位数小于M时,左边将会补上零。
-w865
举例:
- 如果值为123456,当你使用
INT(5)ZEROFILL
,则返回结果为123456. - 如果值为13,当你使用
INT(5)ZEROFILL
,则返回结果为00013
需要说明的是,当使用ZEROFILL时,该列将自动声明为UNSIGNED
4.char(N) & varchar(N)
N: 代表最大存储长度
-w1041
-w677
存储空间
- char(n),会占用 n 个字符的空间,即使字符数小于 n 也会按照 n 个字符来存,剩下的用空格补齐,但检索的时候尾部空格会被隐藏。这样会造成空间浪费。
- varchar(n),如果字符数小于 n,则只会占用字符加上 1 到 2 字节的空间,加上的几个字节用来存储数据大小。没有空间浪费。
- text,按照字符数量来占用空间,用 2 字节记录存储数据大小,这 2 字节不占用 text 数据的空间。没有空间浪费。速度慢,尤其创建临时表的时候会异常悲剧。
建表语句
Create Table: CREATE TABLE `test_db` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`type` int(4) unsigned zerofill DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
UPDATE 操作1
//不会被截断。数据库存储的是'a '
update test_db set name = 'a ' where id = 6;
//(a )
select concat('(', name, ')') from test_db where id = 6 ;
-w764
UPDATE操作2
//Data too long for column 'name' at row 1
update test_db set name = 'abcdd' where id = 6;
UPDATE操作3
update test_db set name = 'abc ' where id = 6;
//(abc)
select concat('(', name, ')') from test_db where id = 6 ;
-w731
5.加餐
查看MySQL 版本信息
mysql> status;
--------------
mysql Ver 14.14 Distrib 5.7.27, for Linux (x86_64) using EditLine wrapper
Connection id: 78
Current database: self_learn
Current user: fucf@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
查看MySQL SQL MODE
SELECT @@sql_mode \G;
*************************** 1. row ***************************
@@sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,
NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,
NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
参考链接:
- https://stackoverflow.com/questions/12592376/mysql-why-specify-display-width-without-using-zerofill
- https://stackoverflow.com/questions/12839927/mysql-tinyint-2-vs-tinyint1-what-is-the-difference
作者:我是付大善人
链接:https://www.jianshu.com/p/53065fa934c4
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。