原文: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. XP下的进程静音技术(遍历进程,遍历输入模块,遍历输入函数,找到函数并HOOK) good

    很多浏览器有这种功能,实现原理都是一样.发声源基本都来自Flash,比如Flash游戏啦,视频播放器啦等等 而Flash的发声都是通过winmm.dll::waveOutWrite函数来完成,所以,我 ...

  2. 与众不同 windows phone (1) - Hello Windows Phone

    原文:与众不同 windows phone (1) - Hello Windows Phone [索引页] [源码下载] 与众不同 windows phone (1) - Hello Windows ...

  3. 如果用float实现居中

    今天发现自己做的一个项目中有个图片切换的下面的按钮不是固定个数,程序那边根据循环实现放几个切换的按钮,但是按钮相对于整体的要居中,刚开始想着用display:inline-block;实现,但是ie6 ...

  4. Find命令, find用法,

    Find命令 用法示例:查找HOME目录下大于1M小于10M的文件$ find ~ -size +1M -size -10M 15个小时这一时刻修改的文件:find . -mmin 900 | xar ...

  5. 这里的*号实际表示就是RAC中所有实例都使用

    您的位置: ITPUB个人空间 » cc59的个人空间 » 日志 发布新日志 我的日志我的足迹我的收藏 unix/linuxHA随笔backup&restoreperformance tuni ...

  6. SilkTest Q&A 2

    Q11:SilkTest中有没有计算web页面上单词数量的函数? A11:你可以使用Clipboard函数.使用Ctrl+a和Ctrl+c,然后解析string的list. Q12:silktest的 ...

  7. 解析android framework下利用app_process来调用java写的命令及示例

    解析android framework下利用app_process来调用java写的命令及示例 在android SDK的framework/base/cmds目录下了,有不少目录,这些目的最终都是b ...

  8. Java Swing界面编程(28)---复选框:JCheckBox

    程序能够通过JRadioButton实现单选button的功能,那么要实现复选框的功能,则必须使用JCheckBox完毕. package com.beyole.util; import java.a ...

  9. Codeforces Round #296 (Div. 2) A B C D

    A:模拟辗转相除法时记录答案 B:3种情况:能降低2,能降低1.不能降低分别考虑清楚 C:利用一个set和一个multiset,把行列分开考虑.利用set自带的排序和查询.每次把对应的块拿出来分成两块 ...

  10. 新出台的治理iMessage垃圾短信的规则

    工信部拟制定<通信短信息服务管理规定>,为治理垃圾短信提供执法根据.当中,对于苹果iMessage垃圾信息泛滥现象,工信部也将跟踪研究技术监測和防范手段.这意味着长期以来处于监管" ...