mysql学习系列(二)
- 作者:tomfans
- 本文地址:http://f-olivia.github.io/database/2015/09/22/mysql/
- 转载请注明出处
#####二、字符串类型
1 固定长度(Fixed-width)
- CHARACTER(length)
- CHAR(length):是CHARACTER的简写,其中MYSQL还可以这么定义:NATIONAL CHAR
2 可变长度(Variable-length)
- VARCHAR(length)
- NATIONAL VARCHAR(length)
#####区别:跟字符集和系统参数sql_mode都有关系
1)长度,char:0~255;varchar:0-65535(255*255)
2)存储(Stored),
3)检索(retrieved)
表1:
值 | CHAR(4) | 检索 | 存储 | VARCHAR(4) | 存储 | 检索 |
'' | ' ' | '' | 4bytes | '' | 1bytes | '' |
'ab' | 'ab ' | 'ab' | 4bytes | 'ab' | 3bytes | 'ab' |
'ab ' | 'ab ' | 'ab' | 4bytes | 'ab ' | 3bytes | 'ab ' |
'abcd' | 'abcd' | 'abcd' | 4bytes | 'abcd' | 5bytes | 'abcd' |
'abcdefgh' | 'abcd' | 'abcd' | 4bytes | 'abcd' | 5bytes | 'abcd' |
从表1中得出以下结论: 表2:
CHAR(M) | VARCHAR(M) | 备注 | |
长度 | 固定长度 | 根据字符集自动换算长度, 该表当中所有之和<65535 | 跟字符集有关 |
存储 | 固定长度,不足补空格; 超长的话, 根据sql_mode 进行报错,或自动截断 | 空字符,需要一个字节; 如果<255个字节,会增加一个 字节,记录长度; 如果>255个字节,会增加两个字节 | 跟sql_mode有关 |
检索 | 取出来的值,会截取多余空格; 跟sql_mode有关 | 跟存储的内容一致 | 跟sql_mode有关 |
具体请看实例: 如图1:
#####有关知识点: a、字符集,这个概念比较大,为了不影响本章主题,这里就不过多介绍,有时间会单独抽出一章来着重介绍
b、sql_mode:表示SQL运行在何种模式,
-
查看:show variables like ‘sql_mode’; 或者 SELECT @@GLOBAL.sql_mode;SELECT @@SESSION.sql_mode;
-
设置:SET GLOBAL sql_mode = ‘modes’;SET SESSION sql_mode = ‘modes’; 或者在配置文件my.cnf(unix)/my.ini(windows),写入sql_mode=”modes”;如果多个用”,”隔开
-
几类常见的模式:STRICT_TRANS_TABLES、STRICT_ALL_TABLES、PAD_CHAR_TO_FULL_LENGTH等
-
参考:refman-5.6-en.a4,Section 5.1.7, “Server SQL Modes”
关于sql_mode具体操作如下: 如图2:
c、常用命令:
查看表结构:
desc(describe) table_name;
explain table_name;
show columns from table_name;
show create table table_name;(这个可以查看表的定义)
举例:创建表t_desc
mysql> create table t_desc(
-> col1 char(6) not null default '',
-> col2 character(6),
-> col3 varchar(6),
-> col4 national varchar(6));
具体操作请看,
如图3:
d、问题:根据mysql参考文档中,varchar(4),如果实际存储‘abcd’,存储长度是5,怎么查看?
3 二进制(BINARY)和可变长度二进制(VARBINARY)
#####区别:跟系统参数sql_mode都有关;与字符集无关
1)长度,BINARY:0~255;VARBINARY:0-65535
2)存储:单个字节存储的,所以跟字符集无关
3)如果,sql_mode指定为空,超过指定长度存储,会报警告,且自动截断;如果指定为STRICT_TRANS_TABLE,则会报错
4)如果,存储值长度不够,用0字节(0x00)补全;
具体请看,
如图4:
4 二进制大对象(BLOB)和文本大对象(text)
该数据类型没有太多介绍,只是存储备注等需要更长描述性字段,涉及2个参数:
- max_sort_length:进行排序和分组有意义的字节长度
- max_allowed_packet:客户端与服务器端通讯缓存包大小
#####区别:列出二进制字符和非二进制字符
-
非二进制字符串 > char(0-255)
> varchar(0-65535)
> text(0-65535)
> TINYTEXT(0-255)
> MEDIUMTEXT(0-16777215)
> LONGTEXT(0-4294967295) -
二进制字符串 > BINARY(0-255)
> VARBINARY(0-65535)
> TINYBLOB(0-255)
> BLOB(0-65535)
> MEDIUMBLOB(0-16777215)
> LONGBLOB(0-4294967295)
5 枚举型(ENUM)和SET字符串对象
1)长度:ENUM(0-65535);SET(64个不同成员)
2)ENUM只能有一个,空串或者为null;SET可以多个值
3)ENUM索引值为自然值,0表示这是非法值;SET索引值为该实际值的二进制编码
4)存储NUMBER类型,也是用引号引起来
具体请看实验吧:
如图5:
blog comments powered by Disqus