mysql里面有没有map类型_MySQL学习(二) 数据类型

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

数值类型

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

整数型

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

4972aeb38ab08ada1f754053a0575d61.png

创建一张表

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_1FLOAT,

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不能表示的值时使用“零”值。

c67256348747dde80dc38bde1c653a17.png

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之间的差别:

Dz8uWDiLuvqxAAAAAElFTkSuQmCC

请注意上表中最后一行的值只适用不使用严格模式时;如果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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell执行perl_【编程技巧(一)】在Perl、Shell和Python中传参与输出帮助文档

社会你明哥,人狠话又多!【小明的碎碎念】与你不见不散!作为一名搞数据的生物狗,咱们是生物狗中代码写得最六的,程序员中生物学得最好的——大家没意见吧,有意见请憋着跟随小明的步伐,让我们开开…

python之路2.0_Python之路【第二十一篇】:JS基础

1.2 ECMAScript尽管 ECMAScript 是一个重要的标准,但它并不是 JavaScript 唯一的部分,当然,也不是唯一被标准化的部分。实际上,一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:● 核心(ECMAScript)● 文档对象…

solr4 mysql自动更新_(solr系列:五) solr定时实时重建索引和增量更新

将mysql中的数据导入到了solr中之后,如果数据库中的数据有变动,solr中还是第一次导入的旧的数据,那该如何是好呢?该如何实现mysql数据库中的数据定时同步到solr中呢?下面将做详细的介绍。准备工作要做好:1、…

mysql pydev_pydev-python 链接mysql数据库(mac系统)

在mac os上安装MySQLdb,遇到了非常多问题,总结一下:首先。假设用sudo easy_install mysql-python命令安装,基本上不会成功的,原因有两个:一是找不到mysql_config位置,二是如今基本上安装的是64位…

上海交通大学python期末考试样题加解析_上海交通大学python期末考试样题加解析...

一、选择题: 将唯一正确的选项写在题前括号中.每题2分.【】(1) 本课程的目标定位是什么?[A] 学习Python语言[B] 学习计算机的工作原理[C] 学习各种算法[D] 学习用计算机解决问题【】(2) 下列哪个标识符是合法的?[A] var-name [B] !#$% [C] _100 [D] elif【】(3) 执行下列语句…

mysql 安装测试ok_tpcc-mysql安装测试与使用的实例教程

1:下载tpcc-mysql的压缩包,从下面的网站进行下载也可直接从叶总博客直接下载:我这边使用的就是后者。2:安装tpcc-mysql[rootmxqmongodb2 tpccmysql]# gunzip tpcc-mysql-src.tgz[rootmxqmongodb2 tpccmysql]# tar xf tpcc-mysql-s…

python多线程写同一文件_Python多线程写文件实例

# -*- coding: utf-8 -*-import threading多线程生成日志工具__author ["yangfei" ]#该方法主要用于写入300行WARN日志def writeWarnLog(file):count0;while count<300:try:file.write(2012-11-28 22:51:01|zookeeper|WARN|m1|172.17.1.15\n)count1except Except…

java asc码_Java中ASC码与字符互相转化

package com.ljq.test;/*** Java中ASC码与字符互相转化** author jiqinlin**/public class ASCTest {private static int ascNum;private static char strChar;public static void main(String[] args) {System.out.println(getAsc("a"));System.out.println(backcha…

hp 导出日志 远程管理卡_惠普服务器远程管理卡安装详解

可以远程管理服务器。带惠普基于Web的网络资源管理和性能监视工具HP Toptools惠普远程管理卡的主要功能是可以实现对服务器的远程监控&#xff0c;其中包括察看日志、远程诊断、远程开/关机、重启等等。基于惠普远程管理卡的重要功能&#xff0c;本文将着重介绍惠普远程管理卡的…

java 错误登陆次数_纯java代码实现登陆次数验证,登陆错误5次之后锁定30分钟

本方法因为是根据思路纯手写&#xff0c;代码可以再简化&#xff0c;功能尝试没问题&#xff0c;最主要就是在登陆验证中的逻辑&#xff0c;checkLogin()方法是登录前的验证&#xff0c;而真正的登陆方式采用的是Shiro&#xff0c;若不是采用Shiro登陆&#xff0c;将该逻辑采用…

java 监听器 分类_java过滤器和监听器详解 分类: 学习专区

过滤器1、Filter工作原理(执行流程)当客户端发出Web资源的请求时&#xff0c;Web服务器根据应用程序配置文件设置的过滤规则进行检查&#xff0c;若客户请求满足过滤规则&#xff0c;则对客户请求&#xff0f;响应进行拦截&#xff0c;对请求头和请求数据进行检查或改动&#x…

linux java启动脚本文件_不错的linux下通用的java程序启动脚本

#!/bin/sh#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用&#xff0c;#也可以作为启动java程序的独立脚本来使用。##Author: tudaxia.com, Date: 2011/6/7##警告!!!&#xff1a;该脚本stop部分使用系统kill命令来强制终止指定的java程序进程。…

linux心跳包检测代码_OpenSSL心跳包越界读敏感信息泄漏漏洞

发布日期&#xff1a;2014-04-10CVE ID&#xff1a;CVE-2014-0160受影响的软件及系统&#xff1a;OpenSSL 1.0.1&#xff0d;OpenSSL 1.0.1fOpenSSL 1.0.2-betaOpenSSL 1.0.2-beta1未受影响的软件及系统&#xff1a;OpenSSL 0.9.8OpenSSL 1.0.0OpenSSL 1.0.1gOpenSSL 1.0.2-bet…

mysql数据库主要负责存储_mysql数据库自带数据库介绍

show databases&#xff1b;查看mysql自带数据库有information_schema&#xff0c;mysql&#xff0c; performance_schema&#xff0c; testinformation_schema数据库有40张表&#xff0c;如下。在MySQL中&#xff0c;把 information_schema 看作是一个数据库&#xff0c;确切说…

python 编辑数学公式_Jupyter快速编辑高大上数学公式 泰勒展开式

欢迎点击「算法与编程之美」↑关注我们&#xff01;本文首发于微信公众号&#xff1a;"算法与编程之美"&#xff0c;欢迎关注&#xff0c;及时了解更多此系列博客。人工智能的基础是机器学习&#xff0c;而通过之前的几篇博客了解到&#xff0c;机器学习的基础是数学…

用猎物皮毛换酒喝java_荒野大镖客2三星毛皮狩猎技巧分享 各种类猎物三星皮毛获取方法...

荒野大镖客2三星毛皮怎么获得&#xff1f;想必很多朋友都还不是很清楚吧&#xff0c;所以呢小编今天给大家带来的就是荒野大镖客2三星毛皮狩猎技巧分享&#xff0c;需要的朋友还不快进来看看&#xff1f;三星毛皮狩猎技巧分享猎物体型分水岭建议以狐狸类为例。(1)中型猎物[比狐…

Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用...

近来由于项目需要&#xff0c;需要用到手机短信验证码的功能&#xff0c;其中最主要的是用到了第三方提供的短信平台接口WebService客户端接口&#xff0c;下面我把我在项目中用到的记录一下&#xff0c;以便给大家提供个思路&#xff0c;由于本人的文采有限&#xff0c;还请大…

java中select的用法_mybaties中select用法,以及常用增删改查

查询语句是使用 MyBatis 时最常用的元素之一select元素配置细节如下属性描述取值默认id在这个模式下唯一的标识符&#xff0c;可被其它语句引用parameterType传给此语句的参数的完整类名或别名resultType语句返回值类型的整类名或别名。注意&#xff0c;如果是集合&#xff0c;…

Js获取短信验证码前段效果

一&#xff1a;先上效果图&#xff1a; 二&#xff1a;源代码文件&#xff1a;reg.html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http:…

java简述标识符和保留字区别_Java 基础语法 - 流年似水莫停留的个人页面 - OSCHINA - 中文开源技术交流社区...

Java 基础语法一个Java程序可以认为是一系列对象的集合&#xff0c;而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。对象&#xff1a;对象是类的一个实例&#xff0c;有状态和行为。例如&#xff0c;一条狗是一个对象&#xff0c;它的…