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)

  

posted @ 2017-12-15 20:35  瓜田月夜  阅读(112)  评论(0)    收藏  举报