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)