MySQL支持多种列类型:数值类型、日期/时间类型和字符串(字符)类型。

数值类型

数值类型又分为整数型与小数型

整数型

下面的表显示了需要的每个整数类型的存储和范围

创建一张表

mysql> CREATE TABLE t_int (
int_1 TINYINT,
int_2 SMALLINT,
int_3 MEDIUMINT,
int_4 INT,
int_5 BIGINT);
Query OK, 0 rows affected mysql> DESC t_int;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| int_1 | tinyint(4) | YES | | NULL | |
| int_2 | smallint(6) | YES | | NULL | |
| int_3 | mediumint(9) | YES | | NULL | |
| int_4 | int(11) | YES | | NULL | |
| int_5 | bigint(20) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
5 rows in set

插入数据,只能插入整型,数据类型不正确或者超出范围都会导致插入数据失败

mysql> INSERT INTO t_int VALUES(100, 100, 100, 100, 100);
Query OK, 1 row affected mysql> INSERT INTO t_int VALUES('a', 'b', 100, 200, 300); -- 数据类型不正确
1366 - Incorrect integer value: 'a' for column 'int_1' at row 1
mysql> INSERT INTO t_int VALUES(255, 10000, 1000, 100000, 1000000); -- 超出范围
1264 - Out of range value for column 'int_1' at row 1
mysql> SELECT * FROM t_int;
+-------+-------+-------+-------+-------+
| int_1 | int_2 | int_3 | int_4 | int_5 |
+-------+-------+-------+-------+-------+
| 100 | 100 | 100 | 100 | 100 |
+-------+-------+-------+-------+-------+
1 row in set

SQL中的数值类型全部都是默认有符号,分正负,如果要使用无符号数据,则需要用UNSIGNED关键字对数据类型进行限定

mysql> ALTER TABLE t_int ADD COLUMN int_6 TINYINT UNSIGNED; -- 无符号类型
Query OK, 1 row affected
Records: 1 Duplicates: 0 Warnings: 0 mysql> DESC t_int;
+-------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| int_1 | tinyint(4) | YES | | NULL | |
| int_2 | smallint(6) | YES | | NULL | |
| int_3 | mediumint(9) | YES | | NULL | |
| int_4 | int(11) | YES | | NULL | |
| int_5 | bigint(20) | YES | | NULL | |
| int_6 | tinyint(3) unsigned | YES | | NULL | |
+-------+---------------------+------+-----+---------+-------+
6 rows in set mysql> INSERT INTO t_int VALUES(127, 10000, 100000, 100000, 1000000, 255); -- TINYINT无符号类型的取值范围为0-255
Query OK, 1 row affected mysql> SELECT * FROM t_int;
+-------+-------+--------+--------+---------+-------+
| int_1 | int_2 | int_3 | int_4 | int_5 | int_6 |
+-------+-------+--------+--------+---------+-------+
| 100 | 100 | 100 | 100 | 100 | NULL |
| 127 | 10000 | 100000 | 100000 | 1000000 | 255 |
+-------+-------+--------+--------+---------+-------+
2 rows in set

给字段加了无符号的限定后,数据插入成功了,在查看表结构的时候,发现每个字段的数据类型之后都会自带一个括号,里面有指定的数字,这个数字表示数据最终显示的位数,例如-123表示显示4位(包括符号位),255表示显示3位,实际上这个数字没有什么特别的含义,只是默认告诉用户可以显示的宽度而已,并不会改变数据的大小。

mysql> ALTER TABLE t_int ADD COLUMN int_7 TINYINT(1) UNSIGNED; -- 显示指定显示宽度
Query OK, 2 rows affected
Records: 2 Duplicates: 0 Warnings: 0 mysql> INSERT INTO t_int VALUES(127, 10000, 100000, 100000, 1000000, 255, 255);
Query OK, 1 row affected mysql> SELECT * FROM t_int;
+-------+-------+--------+--------+---------+-------+-------+
| int_1 | int_2 | int_3 | int_4 | int_5 | int_6 | int_7 |
+-------+-------+--------+--------+---------+-------+-------+
| 100 | 100 | 100 | 100 | 100 | NULL | NULL |
| 127 | 10000 | 100000 | 100000 | 1000000 | 255 | NULL |
| 127 | 10000 | 100000 | 100000 | 1000000 | 255 | 255 |
+-------+-------+--------+--------+---------+-------+-------+
3 rows in set

显示宽度的意义在于当数据不够显示宽度的时候,可以使用ZEROFILL为数字列进行零填充,这时MySQL自动为该列添加UNSIGNED属性

mysql> ALTER TABLE t_int ADD COLUMN int_8 TINYINT(2) UNSIGNED ZEROFILL;
Query OK, 3 rows affected
Records: 3 Duplicates: 0 Warnings: 0 mysql> INSERT INTO t_int VALUES(127, 10000, 100000, 100000, 1000000, 255, 255, 1);
Query OK, 1 row affected mysql> SELECT * FROM t_int;
+-------+-------+--------+--------+---------+-------+-------+-------+
| int_1 | int_2 | int_3 | int_4 | int_5 | int_6 | int_7 | int_8 |
+-------+-------+--------+--------+---------+-------+-------+-------+
| 100 | 100 | 100 | 100 | 100 | NULL | NULL | NULL |
| 127 | 10000 | 100000 | 100000 | 1000000 | 255 | NULL | NULL |
| 127 | 10000 | 100000 | 100000 | 1000000 | 255 | 255 | NULL |
| 127 | 10000 | 100000 | 100000 | 1000000 | 255 | 255 | 01 |
+-------+-------+--------+--------+---------+-------+-------+-------+
4 rows in set

MySQL客户端如Navicat中可能不能正确显示零填充的效果,可以使用命令行窗口进行查看。

小数型

SQL中将小数型又分为浮点型和定点型两种

浮点型:小数点浮动,精度有限,并且会丢失精度(会进行四舍五入),精度位数大概在7位

定点型:小数点固定,精度固定,不会丢失精度,精度位数大概在15位

浮点型

对于浮点列类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节。

FLOAT类型用于表示近似数值数据类型。SQL标准允许在关键字FLOAT后面的括号内选择用位指定精度(但不能为指数范围)。MySQL还支持可选的只用于确定存储大小的精度规定0到23的精度对应FLOAT列的4字节单精度。24到53的精度对应DOUBLE列的8字节双精度。

一个FLOAT类型的数字,允许的值为-3.402823466E+38至-1.175494351E-38,0,1.175494351E-38至3.402823466E+38,这些是基于IEEE标准的理论值,实际范围根据硬件或操作系统可能会稍微小一些。

MySQL允许使用非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。这里,“(M,D)”表示该值一共显示M位整数,其中D位位于小数点后面。例如,定义为FLOAT(7,4)的一个列可以显示为-999.9999。MySQL保存值时进行四舍五入,因此如果在FLOAT(7,4)列内插入999.00009,近似结果是999.0001。

下面以FLOAT为例子,DOUBLE类似

mysql> CREATE TABLE t_float(
float_1 FLOAT,
float_2 FLOAT(10, 2),
float_3 FLOAT(6, 2));
Query OK, 0 rows affected mysql> DESC t_float;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| float_1 | float | YES | | NULL | |
| float_2 | float(10,2) | YES | | NULL | |
| float_3 | float(6,2) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
3 rows in set mysql> INSERT INTO t_float VALUES (1000.10,1000.10,1000.10); -- 正常数据
Query OK, 1 row affected mysql> INSERT INTO t_float VALUES (1234567890,12345678.90,1234.56); -- 正常数据
Query OK, 1 row affected mysql> INSERT INTO t_float VALUES (3e38,3.01e7,1234.56); -- 可以用科学计数法表示
Query OK, 1 row affected mysql> INSERT INTO t_float VALUES (9999999999,99999999.99,9999.99); -- 插入最大值,超过精度位数时系统会进行四舍五入
Query OK, 1 row affected mysql> SELECT * FROM t_float;
+-------------+--------------+---------+
| float_1 | float_2 | float_3 |
+-------------+--------------+---------+
| 1000.1 | 1000.10 | 1000.10 |
| 1234570000 | 12345679.00 | 1234.56 |
| 3e38 | 30100000.00 | 1234.56 |
| 10000000000 | 100000000.00 | 9999.99 |
+-------------+--------------+---------+
4 rows in set

在插入浮点型数据的时候,整型部分是不能超出长度的,但是小数部分可以超出长度(系统会自动四舍五入)

mysql> INSERT INTO t_float VALUES (123456,1234.123456768,123.9876543); -- 小数部分超出,四舍五入
Query OK, 1 row affected mysql> INSERT INTO t_float VALUES (123456,1234.12,12345.56);
1264 - Out of range value for column 'float_3' at row 1 mysql> SELECT * FROM t_float;
+-------------+--------------+---------+
| float_1 | float_2 | float_3 |
+-------------+--------------+---------+
| 1000.1 | 1000.10 | 1000.10 |
| 1234570000 | 12345679.00 | 1234.56 |
| 3e38 | 30100000.00 | 1234.56 |
| 10000000000 | 100000000.00 | 9999.99 |
| 123456 | 1234.12 | 123.99 |
+-------------+--------------+---------+
5 rows in set (0.00 sec)

超出精度范围的浮点数,系统会自动进行四舍五入,如果因为系统进位导致整数部分超出指定的长度,这也是被允许的,例如上面的第4条记录。

为了保证最大可能的可移植性,需要使用近似数值数据值存储的代码应使用FLOAT或DOUBLE PRECISION,不规定精度或位数。

定点型

DECIMAL和NUMERIC类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值,例如货币数据。当声明该类型的列时,可以(并且通常要)指定精度和标度,如

salary DECIMAL(5,2)

在该例子中,5是精度,2是标度。精度表示保存值的主要位数,标度表示小数点后面可以保存的位数。

在标准SQL中,语法DECIMAL(M)等价于DECIMAL(M,0)。同样,语法DECIMAL等价于DECIMAL(M,0),可以通过计算确定M的值。在MySQL中支持DECIMAL和NUMERIC数据类型的变量形式。M默认值是10。

DECIMAL或NUMERIC的最大位数是65,但具体的DECIMAL或NUMERIC列的实际范围受具体列的精度或标度约束。

mysql> CREATE TABLE t_decimal (
float_1 FLOAT (10, 2),
decimal_1 DECIMAL (10, 2));
Query OK, 0 rows affected mysql> INSERT INTO t_decimal VALUES (12345678.90,12345678.90); -- 正常数据
Query OK, 1 row affected mysql> INSERT INTO t_decimal VALUES (1234.123456,1234.1234356); -- 小数部分四舍五入
Query OK, 1 row affected mysql> INSERT INTO t_decimal VALUES (99999999.99,99999999.99); -- 最大值
Query OK, 1 row affected mysql> INSERT INTO t_decimal VALUES (99999999.99,99999999.999); -- 进位超出指定位数,不允许
1264 - Out of range value for column 'decimal_1' at row 1 mysql> SELECT * FROM t_decimal;
+--------------+-------------+
| float_1 | decimal_1 |
+--------------+-------------+
| 12345679.00 | 12345678.90 |
| 1234.12 | 1234.12 |
| 100000000.00 | 99999999.99 |
+--------------+-------------+
3 rows in set (0.00 sec)

时间日期类型

表示时间值的DATE和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。每个时间类型有一个有效值范围和一个“零”值,当指定不合法的MySQL不能表示的值时使用“零”值。

mysql> CREATE TABLE t_date (
id INT,
date_1 DATETIME,
date_2 TIMESTAMP,
date_3 DATE,
date_4 TIME,
date_5 YEAR);
Query OK, 0 rows affected mysql> DESC t_date; -- timestamap不允许为空,有个默认值,为当前时间
+--------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-----------+------+-----+-------------------+-----------------------------+
| id | int(11) | YES | | NULL | |
| date_1 | datetime | YES | | NULL | |
| date_2 | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| date_3 | date | YES | | NULL | |
| date_4 | time | YES | | NULL | |
| date_5 | year(4) | YES | | NULL | |
+--------+-----------+------+-----+-------------------+-----------------------------+
6 rows in set mysql> INSERT INTO t_date VALUES(1, '2018-6-24 15:17:58', '2018-6-24 15:18:14', '2018-6-24', '15:18:27', '2018'); -- 正常数据
Query OK, 1 row affected mysql> INSERT INTO t_date VALUES(2, '2018-6-24 15:17:58', NULL, '2018-6-24', '15:18:27', '2018'); -- timestamp为空NULL,会自动赋当前时间
Query OK, 1 row affected mysql> SELECT * FROM t_date;
+----+---------------------+---------------------+------------+----------+--------+
| id | date_1 | date_2 | date_3 | date_4 | date_5 |
+----+---------------------+---------------------+------------+----------+--------+
| 1 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 2018 |
| 2 | 2018-06-24 15:17:58 | 2018-06-24 15:35:55 | 2018-06-24 | 15:18:27 | 2018 |
+----+---------------------+---------------------+------------+----------+--------+
2 rows in set

'YYYY-MM-DD HH:MM:SS'或'YY-MM-DD HH:MM:SS'格式的字符串。允许“不严格”语法:任何标点符都可以用做日期部分或时间部分之间的间割符。例如,'98-12-31 11:30:45'、'98.12.31 11+30+45'、'98/12/31 11*30*45'和'98@12@31 11^30^45'是等价的

'YYYY-MM-DD'或'YY-MM-DD'格式的字符串。这里也允许使用“不严格的”语法。例如,'98-12-31'、'98.12.31'、'98/12/31'和'98@12@31'是等价的。

'YYYYMMDD'或'YYMMDD'格式的没有间割符的字符串,假定字符串对于日期类型是有意义的。例如,'19970523'和'970523'被解释为 '1997-05-23',但'971332'是不合法的(它有一个没有意义的月和日部分),将变为'0000-00-00'。

YYYYMMDDHHMMSS或YYMMDDHHMMSS格式的数字,假定数字对于日期类型是有意义的。例如,19830905132800和830905132800被解释为 '1983-09-05 13:28:00'。

YYYYMMDD或YYMMDD格式的数字,假定数字对于日期类型是有意义的。例如,19830905和830905被解释为'1983-09-05'。

mysql> INSERT INTO t_date VALUES(3, '2018@6@24 15^17^58', '2018#6#24 15+18+14', '2018/6/24', '15:18:27', '2018'); -- 用不同的标点符号做分隔符
Query OK, 1 row affected mysql> SET sql_mode = ''; -- 设置非严格模式,只在该会话中有效
Query OK, 0 rows affected mysql> SELECT @@sql_mode; -- 查看设置是否生效
+------------+
| @@sql_mode |
+------------+
| |
+------------+
1 row in set mysql> INSERT INTO t_date VALUES(4, 20180624151758, 180624151814, 20181324, '15:18:27', '2018'); -- 插入20181324时会自动转换为零值,前提是要设置非严格模式,否则报错
Query OK, 1 row affected mysql> SELECT * FROM t_date;
+----+---------------------+---------------------+------------+----------+--------+
| id | date_1 | date_2 | date_3 | date_4 | date_5 |
+----+---------------------+---------------------+------------+----------+--------+
| 1 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 2018 |
| 2 | 2018-06-24 15:17:58 | 2018-06-24 15:35:55 | 2018-06-24 | 15:18:27 | 2018 |
| 3 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 2018 |
| 4 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 0000-00-00 | 15:18:27 | 2018 |
+----+---------------------+---------------------+------------+----------+--------+
4 rows in set

YEAR类型可以用二位数,也可以用四位数表示

四位字符串,范围为'1901'到'2155'。

四位数字,范围为1901到2155。

两位字符串,范围为'00'到'99'。'00'到'69'和'70'到'99'范围的值被转换为2000到2069和1970到1999范围的YEAR值。

两位整数,范围为1到99。1到69和70到99范围的值被转换为2001到2069和1970到1999范围的YEAR值。请注意两位整数范围与两位字符串范围稍有不同,因为你不能直接将零指定为一个字符串'0'或'00'或它被解释为0000。

mysql> INSERT INTO t_date VALUES(6, '2018-6-24 15:17:58', '2018-6-24 15:18:14', '2018-6-24', '15:18:27', 2100);
Query OK, 1 row affected mysql> INSERT INTO t_date VALUES(7, '2018-6-24 15:17:58', '2018-6-24 15:18:14', '2018-6-24', '15:18:27', 2166); -- 超出范围转换为零值
Query OK, 1 row affected mysql> INSERT INTO t_date VALUES(8, '2018-6-24 15:17:58', '2018-6-24 15:18:14', '2018-6-24', '15:18:27', '69');
Query OK, 1 row affected mysql> INSERT INTO t_date VALUES(9, '2018-6-24 15:17:58', '2018-6-24 15:18:14', '2018-6-24', '15:18:27', '70');
Query OK, 1 row affected mysql> SELECT * FROM t_date;
+------+---------------------+---------------------+------------+----------+--------+
| id | date_1 | date_2 | date_3 | date_4 | date_5 |
+------+---------------------+---------------------+------------+----------+--------+
| 1 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 2018 |
| 2 | 2018-06-24 15:17:58 | 2018-06-24 15:35:55 | 2018-06-24 | 15:18:27 | 2018 |
| 3 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 2018 |
| 4 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 0000-00-00 | 15:18:27 | 2018 |
| 6 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 2100 |
| 7 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 0000 |
| 8 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 2069 |
| 9 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 1970 |
+------+---------------------+---------------------+------------+----------+--------+
8 rows in set (0.00 sec)

字符串类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

CHAR与VARCHAR类型

CHAR表示定长,如CHAR(10)表示可以存储10个字符,最大长度为255个字符,当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。

VARCHAR表示变长,如VARCHAR(10)表示可以存储10个字符,最大长度为65535个字符(VARCHAR的最大有效长度由最大行大小和使用的字符集确定,实际最大长度为65532个字符),与CHAR不同的是,VARCHAR值保存时只保存需要的字符数,另加一个字节表示字符的长度(如果长度超过255,则使用两个字节)。

VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留。

下面的表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的差别:

aaarticlea/png;base64,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" alt="" />

请注意上表中最后一行的值只适用不使用严格模式时;如果MySQL运行在严格模式,超过列长度不的值不保存,并且会出现错误。

定长的磁盘空间比较浪费, 但是效率高

相反的,变长的磁盘空间比较节省, 但是效率低

BINARY与VARBINARY类型

BLOB与TEXT类型

通常超过255个字符的数据使用大文本进行存储,根据存储的数据格式分为BLOB与TEXT,BLOB用来存储二进制数据(少用),TEXT用来存储文字。

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

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

ENUM类型

ENUM是一个字符串对象,其值来自表创建时在列规定中显式枚举的一列值,每个枚举值有一个索引(NULL值的索引是NULL),从1开始编号

mysql> CREATE TABLE t_enum ( -- 创建枚举表
gender ENUM('man', 'woman', 'unknow')); Query OK, 0 rows affected mysql> INSERT INTO t_enum VALUES ('man');
Query OK, 1 row affected mysql> INSERT INTO t_enum VALUES ('woman');
Query OK, 1 row affected mysql> INSERT INTO t_enum VALUES ('haha'); -- 不在枚举定义的值里面,不允许插入,起到规范数据的作用
1265 - Data truncated for column 'gender' at row 1

如果在数值上下文中检索一个ENUM值,将返回列值的索引。例如,你可以这样从ENUM列搜索数值值:

mysql> SELECT gender + 0, gender FROM t_enum;
+------------+--------+
| gender + 0 | gender |
+------------+--------+
| 1 | man |
| 2 | woman |
+------------+--------+
2 rows in set

由于枚举存储的是数值,所以可以直接插入数值

mysql> INSERT INTO t_enum VALUES (1), (2); -- 直接插入数值
Query OK, 2 rows affected
Records: 2 Duplicates: 0 Warnings: 0 mysql> SELECT gender + 0, gender FROM t_enum;
+------------+--------+
| gender + 0 | gender |
+------------+--------+
| 1 | man |
| 2 | woman |
| 1 | man |
| 2 | woman |
+------------+--------+
4 rows in set

SET类型

集合跟枚举很类似,实际存储的是数值(SET最多可以有64个不同的成员),而不是字符串,可以把集合看成是多选框,枚举看成是单选

mysql> CREATE TABLE t_set (
letter SET ('a', 'b', 'c', 'd'));
Query OK, 0 rows affected mysql> INSERT INTO t_set VALUES ('a,b');
Query OK, 1 row affected mysql> INSERT INTO t_set VALUES ('a,b,c');
Query OK, 1 row affected

MySQL用数字保存SET值,所保存值的低阶位对应第1个SET成员。如果在数值上下文中检索一个SET值,检索的值的位设置对应组成列值的SET成员,例如,你可以这样从一个SET列检索数值值

mysql> SELECT letter + 0, letter FROM t_set;
+------------+--------+
| letter + 0 | letter |
+------------+--------+
| 3 | a,b |
| 7 | a,b,c |
+------------+--------+
2 rows in set

如果你为该列分配一个值9,其二进制形式为1001,因此第1个和第4个SET值成员'a'和'd'被选择,结果值为 'a,d'。
对于包含多个SET元素的值,当插入值时元素所列的顺序并不重要。在值中一个给定的元素列了多少次也不重要。当以后检索该值时,值中的每个元素出现一次,根据表创建时指定的顺序列出元素。例如,插入值'a,d'、'd,a'、'a,d,d'、'a,d,a'和'd,a,d'

mysql> INSERT INTO t_set VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
Query OK, 5 rows affected
Records: 5 Duplicates: 0 Warnings: 0 mysql> SELECT letter + 0, letter FROM t_set; -- 检索时所有的值将显示为a,d
+------------+--------+
| letter + 0 | letter |
+------------+--------+
| 3 | a,b |
| 7 | a,b,c |
| 9 | a,d |
| 9 | a,d |
| 9 | a,d |
| 9 | a,d |
| 9 | a,d |
+------------+--------+
7 rows in set

通常情况,可以使用FIND_IN_SET()函数或LIKE操作符搜索SET值:

mysql> SELECT * FROM t_set WHERE FIND_IN_SET('a',letter) > 0; -- 表示找出t_set包含a的成员
+--------+
| letter |
+--------+
| a,b |
| a,b,c |
| a,d |
| a,d |
| a,d |
| a,d |
| a,d |
+--------+
7 rows in set mysql> SELECT * FROM t_set WHERE letter LIKE '%a%'; -- 所有set中包含a的成员,甚至是在另一个SET成员的子字符串中
+--------+
| letter |
+--------+
| a,b |
| a,b,c |
| a,d |
| a,d |
| a,d |
| a,d |
| a,d |
+--------+
7 rows in set

MySQL学习(二) 数据类型的更多相关文章

  1. MySQL学习(二): 数据类型记录

    整形: 浮点型: 日期时间:(使用较少,可能存在跨区域问题) 字符型: CHAR(M):定长,会将位数补充到M位 VARCHAR(M):非定长,最多到达M位 ENUM('v1','v2',...):从 ...

  2. MySQL学习5 - 数据类型二.md

    一 字符类型 二 枚举类型和集合类型 一 字符类型 #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括号内的 ...

  3. mysql学习二、SQL常用数据类型

    一.常用数据类型 二.选择数据类型的原则: 1 业务需要 2 满足第一个条件下,需要存储空间最小的. 三.常用的选择数据类型思路:

  4. 数据库Mysql的学习(二)-数据类型和创建

    数据类型:数据列,存储过程参数,表达式和局部变量的数据特征. 整形: tinyint:一个字节,-128到127:2的7次方 smallint:两个字节,-32768到32767:2的15次方 med ...

  5. MySQL学习4 - 数据类型一

    介绍 一.数值类型 二.浮点型 验证三种类型建表 验证三种类型的精度 三.日期类型 综合练习: 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选 ...

  6. Redis 学习(二) —— 数据类型及操作

    Redis支持string.list.set.zset.hash等数据类型,这一篇学习redis的数据类型.命令及某些使用场景. 一.String,字符串 字符串是 Redis 最基本的数据类型.一个 ...

  7. MySql学习(二) —— where / having / group by / order by / limit 简单查询

    注:该MySql系列博客仅为个人学习笔记. 这篇博客主要记录sql的五种子句查询语法! 一个重要的概念:将字段当做变量看,无论是条件,还是函数,或者查出来的字段. select五种子句 where 条 ...

  8. MySQL学习笔记--数据类型

    一.数据类型(内容参考<SQL学习指南>)不完整 1.文本类型 文本类型 最大字节数 tinytext 255 text 65535 varchar 65536 mediumtext 16 ...

  9. MySQL学习(二)——SQL语句创建删除修改以及中文乱码问题

    一.对数据库的操作 1.创建一个库 create database 库名; 创建带有编码的:create database 库名 character set 编码; 查看编码:show create ...

  10. MYSQL学习笔记——数据类型

    mysql的数据类型可以分为三大类,分别是数值数据类型.字符串数据类型以及日期时间数据类型. 数值数据类型                                               ...

随机推荐

  1. Jersey RESTful WebService框架学习(八)文件下载防乱码

    最近在做下载时候  不同浏览器下载的文件一直出现乱码,不知道怎么设置文件的编码,百度许久,找到一个解决办法如下 /** * 文件下载 * @param request * @return */ @GE ...

  2. winform改变启动界面

    我们知道,有时做个小项目什么的,一般从登录开始,再到主页,再到其他业务,如果做到其他页面功能,调试时还要从登录页面一个个点进去,明显的降低开发进度. 这时,我们可以直接将目标界面改为启动页面即可. u ...

  3. docker安装镜像

    CMD 容器启动命令 CMD指令用于为执行容器提供默认值.每个Dockerfile只有一个CMD命令,如果指定了多个CMD命令,那么只有最后一条会被执行,如果启动容器的时候指定了运行的命令,则会覆盖掉 ...

  4. Autofac与AOP功能例子

    using Autofac.Extras.DynamicProxy; using System; using System.Collections.Generic; using System.Linq ...

  5. ZZ 使用Jenkins配置Git+Maven的自动化构建

    http://blog.csdn.net/xlgen157387/article/details/50353317 Jenkins是帮我们将代码进行统一的编译打包.还可以放到tomcat容器中进行发布 ...

  6. Runtime之实例总结

    通过前面几篇对Runtime的讲解,本篇汇总一下Runtime实际中常用的一些场景. 1.获取类的基本信息 获取类名: const char *className = class_getName(cl ...

  7. ZKWeb网页框架1.9正式发布

    1.9.0更新的内容有 更新项目工具 更好的支持Linux 添加工具函数 Exception.ToDetailedString (获取例外的详细信息) Exception.ToSummaryStrin ...

  8. JavaScript中的定时事件

    这两个函数都是在给定的时间之后开始执行的,并不是立即执行. var timeId = window.setTimeout("method()",1000); //定时执行,还可以这 ...

  9. IDEA中读取 resource目录下文件

    1. 资源文件 2. 加载文件 public void test() { try { System.out.println("begin test"); String filepa ...

  10. USB协议介绍

    这里有必要先说清楚一下USB2.0规范的由来.USB2.0技术规范是有由Compaq.Hewlett Packard.Intel.Lucent.Microsoft.NEC.Philips共同制定.发布 ...