原文:Mysql学习笔记(二)数据类型 补充

PS:简单的补充一下数据类型里的String类型以及列类型...

学习内容:

1.String类型

2.列类型存储需求

String类型:

i.char与varchar

char与varchar的类型相似,但是他们的保存方式和检索方式不同...

char的存储结构是固定长度的存储...即指定了几个字节,那么就占用几个字节,如char(4),那么无论存入的是什么字串,那么都占用四个字节...char的

可表示长度范围为0-255的任何值,当保存的字节不够指定的范围时,会使用空格来补齐...当检索的时候,会剪除掉补齐的空格...

varchar的存储结构是可变的存储,即我们指定了varchar(4),但是我们存储的是“ab”那么在varchar的存储中只占用了三个字节..varchar占用的字

节,是我们保存的字节length+1的长度...可表示的长度范围是0-65535之间的任何值...当我们保存的字串长度超过了我们定义的范围的时候,按照不严格的格式,多余的部分会被直接舍去...若是严格格式会出现错误...还有在char和varchar进行字符比较的时候,都会舍去其中的空格进行比较...

值             CHAR(4)      存储需求     VARCHAR(4) 存储需求
" '    ' 四个字节 '' 一个字节
'ab' 'ab  ' 四个字节 'ab ' 三个字节
'abcd' 'abcd' 四个字节 'abcd' 五个字节
'abcdefg' 'abcd' 四个字节 'abcd' 五个字节
mysql> CREATE TABLE names (myname CHAR(10), yourname VARCHAR(10));
Query OK, 0 rows affected (0.09 sec) mysql> INSERT INTO names VALUES ('Monty ', 'Monty ');
Query OK, 1 row affected (0.00 sec) mysql> SELECT myname = 'Monty ', yourname = 'Monty ' FROM names;
+--------------------+----------------------+
| myname = 'Monty  ' | yourname = 'Monty  ' |
+--------------------+----------------------+
|                  1 |                    1  |
+--------------------+----------------------+这是比较的结果...并且在所有mysql中均是如此,不会受到服务器模式的影响...
ii.binary 与 varbinary

BINARY和VARBINARY类类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

iii.BLOB和TEXT类型

BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。

有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求。

iv.ENUM..枚举类型

枚举类型一般在公司中会用得到,在这里也简单的介绍一下..
枚举其实就是在我们创建表结构的时候,定义的一种数据类型,在我们在执行插入操作的时候,只允许插入指定的枚举类型的范围中,如果插入的数据超过了枚举类型的范围,在严格的情况下就会出错...不严格的情况下会发出警告。。

create table enum
(
f1 enum('','','','','','') 枚举定义的范围
);//
-------------------------------------------------------
insert into enum values(1);
insert into enum values(2);
insert into enum values(3); insert into enum values(8)//严格情况下会出现下列错误... ERROR 1265 (01000): Data truncated for column 'f1' at row 1 不严格的情况下会发出警告,并且会将空值插入表格当中... 改表 alter table enum f1 modify f1 enum('a','b','c','d','e','f'); select * from enum;

这里只是简单的介绍了一下枚举类型,想具体研究的,可以去查看帮助文档...

v.SET(集合类型)

SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。指定包括多个SET成员的SET列值时各成员之间用逗号(‘,’)间隔开。这样SET成员值本身不能包含逗号。set的容纳范围为64个不同的成员..set其实和枚举差不多,set指定了一个集合范围,在我们插入数据的时候,需要插入在set范围之内的元素,如果插入了未被包含的元素,那么就会发出警告..

CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));//新建表格

INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

select col from myset;//索引值全部显示'a,d';

insert into myset (col) values('a,b,s');//会发出警告,并且s不会被插入到表格当中

select col from myset;

也可以使用find_in_set()或like修饰符来搜索set值...

mysql> SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0;

mysql> SELECT * FROM tbl_name WHERE set_col LIKE '%value%';

//第1个语句找出SET_col包含value set成员的行。第2个类似,但有所不同:它在其它地方找出set_col包含value的行,甚至是在另一个SET成员的子字符串中。

//下面的语句也是合法的:

mysql> SELECT * FROM tbl_name WHERE set_col & 1;

mysql> SELECT * FROM tbl_name WHERE set_col = 'val1,val2';

//第1个语句寻找包含第1个set成员的值。第2个语句寻找一个确切匹配的值。应注意第2类的比较。将set值与'val1,val2'比较返回的结果与同'val2,val1'比较返回的结果不同。指定值时的顺序应与在列定义中所列的顺序相同。

其实在现在的公司中,现在set,enum,boolean都被tinyint微整形所代替,在这方面有所了解即可...

列类型存储需求:

列类型的存储需求实际的意义就是,当我们在存储数据的时候,要用合适的类型来存储我们的数据类型...比如说当我们的存储的数据的范围为1-99999,若使用整数,那么最好的选择就是mediumint unsigned,用int也可以,但是为了优化存储,我们使用了mediumint unsigned,总而言之,在存储数据的时候一定要选择合适的存储类型...

使用来自其他数据库引擎的列类型

为了使用由其它卖方编写的SQL执行代码,MySQL按照下表所示对列类型进行映射。通过这些映射,可以很容易地从其它数据库引擎将表定义导入到MySQL中:

其他卖方类型 mysql类型
BOOL TINYINT
BOOLEAN TINYINT
CHAR VARCHAR(M) VARCHAR(M)
DEC   DECIMAL
FIXED DECIMAL
FLOAT4 FLOAT
FLOAT8 DOUBLE
INT1 TINYINT
INT2 SMALLINT
INT3 MEDIUMINT
INT4 INT
INT8 BIGINT
LONG VARBINARY MEDIUMBLOB
LONG VARCHAR MEDIUMTEXT
LONG MEDIUMTEXT
MIDDLEINT MEDIUMINT
NUMERIC DECIMAL


在创建表时对列类型进行映射,然后原来的类型定义被丢弃。如果你使用其它卖方的类型创建一个表,然后执行DESCRIBE tbl_name语句,MySQL使用等效的MySQL类型来报告表的结构。例如:

mysql> CREATE TABLE t (a BOOL, b FLOAT8, c LONG, d NUMERIC);
Query OK, 0 rows affected (0.08 sec) mysql> DESCRIBE t;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| a | tinyint(1) | YES | | NULL | |
| b | double | YES | | NULL | |
| c | mediumtext | YES | | NULL | |
| d | decimal(10,0) | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

以上算是对数据类型的进一步补充...欢迎大家来指点...

Mysql学习笔记(二)数据类型 补充的更多相关文章

  1. (C/C++学习笔记) 二. 数据类型

    二. 数据类型 ● 数据类型和sizeof关键字(也是一个操作符) ※ 在现代半导体存储器中, 例如在随机存取存储器或闪存中, 位(bit)的两个值可以由存储电容器的两个层级的电荷表示(In mode ...

  2. MySQL学习笔记(二):MySQL数据类型汇总及选择参考

    本文主要介绍了MySQL 的常用数据类型,以及实际应用时如何选择合适的类型.  ******几个通用的简单原则:******* 1. 更小的通常更好.但是要确保没有低估需要存储的值的范围,如果无法确定 ...

  3. MySQL学习笔记之数据类型

    数据类型在所有的数据库使用当中,都是避免不了的部分.以前每次写SQL语句,对于定义成哪种数据类型总是迷迷糊糊,今天就来彻底弄清.以下介绍仅针对MySQL 5.5以上版本. 一.字符串类型 1.char ...

  4. MySQL学习笔记二

    Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...

  5. MySQL学习笔记(二)

    连接与断开服务器 应该以下面的方式连接MySQL服务器,而不是将密码以明文方式输入连接. C:\> mysql -h host -u user -pEnter password: ******* ...

  6. MySQL 学习笔记 二

    Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...

  7. C语言学习笔记二---数据类型运算符与表达式

    一.C的基本语法单位 1.标识符:有效长度:31(DOS环境下) 2.关键字:main不是 3.分隔符:空格符,制表符,换行符,换页符 4.注释符:a./*.....*/   b.// 二.C的常用输 ...

  8. MySQL学习笔记二:权限管理

    1. 创建和删除用户,mysql中的用户是由用户名和主机名来确定的 create user "user_name@host_name" identified by passwd; ...

  9. python学习笔记二 数据类型(基础篇)

    Python基础 对于Python,一切事物都是对象,对象基于类创建         不同类型的类可以创造出字符串,数字,列表这样的对象,比如"koka".24.['北京', '上 ...

  10. sql分类及基本sql操作,校对规则(mysql学习笔记二)

    sql针对操作对象分为不同语言 数据操作(管理)语言 DML或者将其细分为 ( 查询  DQL 管理(增,删,改)  DML) 数据定义语言(对保存数据的格式进行定义) DDL 数据库控制语言(针对数 ...

随机推荐

  1. Qt之启动外部程序(使用参数很全面,还使用了setProcessChannelMode)

    简述 QProcess可以用来启动外部程序,并与它们交互. 要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串. 另外,也可以 ...

  2. Mysql对自增主键ID进行重新排序

    Mysql数据库表的自增主键ID号经过一段时间的添加与删除之后乱了,需要重新排列. 原理:删除原有的自增ID,重新建立新的自增ID. 1,删除原有主键: ALTER TABLE `table_name ...

  3. [置顶] dubbo管理控制台安装

    dubbo管理控制台开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能. 1.下载dubbo 地址:http://code.alibabatech.com/mvn ...

  4. SQL查询数据封装JavaBean对象

    public static List getListBySql(String sql, Class cls){   List list = new ArrayList();   Connection ...

  5. anthelion编译

    编程工程 $ cd ./anthelion/anthelion/target/classes$ java -Xmx15G -cp ../Anthelion-1.0.0-jar-with-depende ...

  6. 如何debug ruby

    how to debug ruby: 1. 第一种方法,直接使用ruby内建的debug在命令行调试,这个个gdb或者pdb的命令差不多. ruby -r debug yourubyfile.rb 2 ...

  7. jQuery遍历函数

    jQuery遍历函数包含了用于筛选.查找和串联元素的方法. .add():将元素加入到匹配元素的集合中. .andSelf():把堆栈中之前的元素集加入到当前集合中. .children():获得匹配 ...

  8. ie浏览器提交参数和其它浏览器的区别

    场景描述: 用户注册模块(ajax提交方式,post方法),在url后追加了一个参数,如:url+‘btnvalue=中文参数’,如此在非ie浏览器注册时,功能完好,但在ie下注册不成功.调式后发现在 ...

  9. POJ 3696 神TM数论

    鸣谢: http://blog.csdn.net/yhrun/article/details/6908470 http://blog.sina.com.cn/s/blog_6a46cc3f0100tv ...

  10. 欧拉计划·第四题

    题目4:找出由两个三位数乘积构成的回文. 一个回文数指的是从左向右和从右向左读都一样的数字.最大的由两个两位数乘积构成的回文数是9009 = 91 * 99. 找出最大的有由个三位数乘积构成的回文数. ...