数据类型和运算符(二)

原创 2015年07月10日 16:32:28

字符串类型

字符串类型用来存储字符串数据,除了字符串数据之外,还可以其它的数据,例如图片和声音的二进制数据

类型有:char varchar binary varbinary blob text enum set

varchar blob text 是变长类型,对于存储需求取决于列值的实际长度,而不是取决于类型的最大可能尺寸

实际的存储需要是字符串的长度L,加上1个字节以记录字符串的长度。

char(M)和varchar(M)类型

char是固定长度的字符串,在定义时候指定了字符串列长。M的范围是0—255

varchar是长度可以改变的字符串,M的范围是0—65535

varchar的最大实际长度由最长的行的大小和使用的字符集确定,而其实际占用的空间为字符串的实际长度加上1

char和varchar的对比

char(4)定义了固定长度为4的列,不管存入的数据长度为多少,所占用的空间为4个字节,varchar(4)所定义的列所占的字节数为实际长度加上1

mysql> create table t1
    -> (
    ->     ch char(4),
    ->     vch varchar(4)
    -> );
Query OK, 0 rows affected (0.09 sec)

mysql> insert into t1 values('ab  ','ab  ');
Query OK, 1 row affected (0.06 sec)

mysql> select concat('(',ch,')'),concat('(',vch,')') from t1;
+--------------------+---------------------+
| concat('(',ch,')') | concat('(',vch,')') |
+--------------------+---------------------+
| (ab)               | (ab  )              |
+--------------------+---------------------+
1 row in set (0.02 sec)

TEXT类型

种类:tinytext、text、mediumtext、longtext

1.tinytext最大长度为255
2.text最大长度65535
3.mediumtext长度为16777215
4.longtext最大长度为42949672954GB)

enum类型

语法格式:字段名 enum(‘值1’,‘值2’,‘值3’,。。。。)

enum类型的字段在取值时只能在指定的每句列表中取,而且每次只能取一个,mysql存储的是enum的索引值,索引值是从1开始编号的,枚举最多可以有65535个元素

enum值按照索引顺序排列,并且空字符串排在非空字符串前面,null值排在其它所有的枚举值前面

mysql> create table t2
    -> (
    ->     enm enum('first','second','third')
    -> );
Query OK, 0 rows affected (0.05 sec)

mysql> insert into t2 values('first'),('second'),(NULL);
Query OK, 3 rows affected (0.04 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from t2;
+--------+
| enm    |
+--------+
| first  |
| second |
| NULL   |
+--------+

enum列总是会有一个默认值的,如果将enum列声明为NULL,NULL值就为该列的一个有效值,并且默认值

为NULL。如果enum的列被声明为not null,那么默认值就为允许的值列表的第一个元素

通过索引取值

mysql> create table t3
    -> (
    ->     enm enum('good','better','well')
    -> );
Query OK, 0 rows affected (0.05 sec)

mysql> insert into t3 values(1),(3);
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t3;
+------+
| enm  |
+------+
| good |
| well |
+------+
2 rows in set (0.00 sec)

set类型
set是一个字符串对象,可以有零个或者多个值,set列最多有64个成员,其值为创建时规定的一列值。指定包含多个set成员的set值,用,隔开

语法:set(‘值1’,‘值2’,。。。)

set内部也有索引值,与enum不同的是,enum类型的字段只能从定义的列值中选择一个值来插入,而set类型的列可以从定义的列值中选择多个字符的联合

注意的是:如果插入set字段中的列值有重复的话,mysql会删除重复的值

mysql> create table t4
    -> (
    ->     s set('a','b','c','d')
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> insert into t4 values('a'),('a,c'),('a,b,c');
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from t4;
+-------+
| s     |
+-------+
| a     |
| a,c   |
| a,b,c |
+-------+
3 rows in set (0.00 sec)

对于set来说,如果插入的值是重复,就只取一个,例如‘a,b,a’,结果为’a,b’ 插入后是按照顺序排列值的
例如 ‘c,a,d’ 会显示’a,c,d’

二进制类型

分类:bit,binary,varchar,tinyblob,blob,mediumblob,longblob

bit(m)类型

m表示每个值的位数,范围为1–64,如果m被省略,默认为1,如果bit(m)列分配的值小于m位,值的左边用0来填充

mysql> create table t5
    -> (
    ->    b bit(5)
    -> );
Query OK, 0 rows affected (0.06 sec)

mysql> insert into t5 values(2),(9),(12),(15);
Query OK, 4 rows affected (0.05 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from t5;
+------+
| b    |
+------+
|     |
|           |
|     |
|     |
+------+
4 rows in set (0.00 sec)

mysql> select bin(b+0) from t5;
+----------+
| bin(b+0) |
+----------+
| 10       |
| 1001     |
| 1100     |
| 1111     |
+----------+
4 rows in set (0.03 sec)

其中b+0表示将二进制的结果转换为对应的数字的值,bin()函数将数字转换为二进制,默认情况下mysql不可以插入超出该列允许范围的值,因而插入的数据要在指定的范围内

binarry(m)和varbinary(m)类型

binary(m)类型长度是固定的,不足长度的在右边填充’\0’

varbinary(m)长度是可变的。

mysql> create table t6
    -> (
    ->     b binary(3),
    ->     vb varbinary(30)
    -> );
Query OK, 0 rows affected (0.06 sec)

mysql> insert into t6 values(5,5);
Query OK, 1 row affected (0.02 sec)

mysql> select length(b),length(vb) from t6;
+-----------+------------+
| length(b) | length(vb) |
+-----------+------------+
|         3 |          1 |
+-----------+------------+
1 row in set (0.08 sec)

blob类型

blob列存储的是二进制字符串,text列存储的是非二进制字符串。

blob类型的列没有字符集,并且排序和比较基于列值字节的数值,text列有一个字符集,并且根据字符集对值进行排序和比较

版权声明:可以随意转载

运算符重载常见问题:C#二元运算符的参数之一必须是包含类型

先来看看下面的这段代码 查看源代码打印帮助 01 using System; 02 using System.Collections.Generic; ...
  • wljhk2006
  • wljhk2006
  • 2015年01月29日 15:20
  • 1305

PHP中字符串类型与数值类型混合计算

字符串转数值的规则当一个字符串被当作一个数值来取值,其结果和类型如下: 如果该字符串没有包含 ‘.’,’e’ 或 ‘E’ 并且其数字值在整型的范围之内(由 PHP_INT_MAX 所定义),该字符串将...
  • u012314976
  • u012314976
  • 2016年09月20日 15:31
  • 2196

Java的数据类型和运算符

一,数据类型分类(2种)1. 基本数据类型(3种) 数值型:整数类型(4种):byte(1字节):范围(-128~127); short(2字节):范围(-32768~32767); int(4字节)...
  • xlqx11
  • xlqx11
  • 2015年08月17日 23:41
  • 1225

变量、数据类型和运算符

  • 2017年12月17日 17:24
  • 94KB
  • 下载

变量、数据类型和运算符

  • 2011年10月03日 10:21
  • 1.62MB
  • 下载

第3章 数据类型、运算符与表达式

  • 2012年08月16日 10:07
  • 413KB
  • 下载

数据类型与运算符

  • 2012年12月11日 13:59
  • 27KB
  • 下载

第2章 数据类型、运算符与表达式

  • 2009年07月31日 00:06
  • 927KB
  • 下载

第2章 JavaScript数据类型和运算符

  • 2017年07月16日 09:08
  • 625KB
  • 下载

8_变量命名规则 数据类型 运算符 格式化输出 流程控制视频

  • 2016年03月21日 15:26
  • 41.38MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据类型和运算符(二)
举报原因:
原因补充:

(最多只允许输入30个字)