mysql 补充
mysql默认数据库
mysql - 用户权限相关数据
test - 用于用户测试数据
information_schema - MySQL本身架构相关数据
char和varchar;
#char类型:定长,简单粗暴,浪费空间,存取速度快
存储:
存储char类型的值时,会往右填充空格来满足长度
例如:指定长度为10,存>10个字符则报错,存<10个字符则用空格填充直到凑够10个字符存储
检索:
在检索或者说查询时,查出的结果会自动删除尾部的空格,除非我们打开pad_char_to_full_length SQL模式
(SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';)
#varchar类型:变长,精准,节省空间,存取速度慢
存储:
varchar类型存储数据的真实内容,不会用空格填充,如果'ab ',尾部的空格也会被存起来
强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数
(1-2Bytes最大表示65535个数字,正好符合mysql对row的最大字节限制,即已经足够使用)
如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255)
如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535)
检索:
尾部有空格会保存下来,在检索或者说查询时,也会正常显示包含空格在内的内容
测试varchar
mysql> desc innodb_t1;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| name_ | varchar(5) | YES | | NULL | |
| name | char(5) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
-- 有以上表
mysql> insert into innodb_t1 values ('x','x');
Query OK, 1 row affected (0.05 sec)
-- 插入数据
mysql> select * from innodb_t1 where name = 'x';
+-------+------+
| name_ | name |
+-------+------+
| x | x |
+-------+------+
1 row in set (0.00 sec)
mysql> select * from innodb_t1 where name = 'x '; -- 后面四个空格
+-------+------+
| name_ | name |
+-------+------+
| x | x |
+-------+------+
1 row in set (0.00 sec)
数据类型的长度;
整数类型的长度--是指定查询结果的显示宽度(超过宽度依然可以存),与存储范围无关
-- 且数字类型有默认长度,有符号的默认长度就是最大范围的长度+1(负号),无符号的默认长度就是最大范围的长度.
字符串类型的长度--是指最大存储长度
-- 有如下结构表
mysql> desc innodb_t1;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| name_ | varchar(5) | YES | | NULL | |
| name | int(5) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
mysql> insert into innodb_t1 values ('www','555555');
mysql> insert into innodb_t1 values ('wwwww','5555555');
mysql> select * from innodb_t1;
+-------+---------+
| name_ | name |
+-------+---------+
| wwww | 555555 |
| wwwww | 5555555 |
+-------+---------+
-- 修改表结构,用0来填充
mysql> alter table innodb_t1 modify name int(5) zerofill;
Query OK, 2 rows affected (0.91 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> desc innodb_t1;
+-------+--------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------------------+------+-----+---------+-------+
| name_ | varchar(5) | YES | | NULL | |
| name | int(5) unsigned zerofill | YES | | NULL | |
+-------+--------------------------+------+-----+---------+-------+
-- 插入数据
mysql> insert into innodb_t1 values ('w','5');
Query OK, 1 row affected (0.06 sec)
mysql> select * from innodb_t1;
+-------+---------+
| name_ | name |
+-------+---------+
| wwww | 555555 |
| wwwww | 5555555 |
| w | 00005 | -- 不足五位的会用0填充至五位
+-------+---------+
3 rows in set (0.00 sec)

浙公网安备 33010602011771号