赞
踩
目录
MySQL支持多种数据类型,大致可以分为以下几类:
取值范围如果加了unsigned,则可以存储更大范围的正整数,如tinyint unsigned的取值范围为(0~256)。TINYINT UNSIGNED通常用于需要存储较小整数值且不需要负数的情况,例如状态码、布尔值等。
MySQL数据类型 | 含义(有符号) |
tinyint(m) | 1个字节 范围(-128~127) |
smallint(m) | 2个字节 范围(-32768~32767) |
mediumint(m) | 3个字节 范围(-8388608~8388607) |
int(m) | 4个字节 范围(-2147483648~2147483647) |
bigint(m) | 8个字节 范围(+-9.22*10的18次方) |
设一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位。整数部分最大是3位,如果插入数12.123456,存储的是12.1234,如果插入12.12,存储的是12.1200.
MySQL数据类型 | 含义 |
float(m,d) | 单精度浮点型 8位精度(4字节) m总个数,d小数位 |
double(m,d) | 双精度浮点型 16位精度(8字节) m总个数,d小数位 |
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位。
若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。
MySQL数据类型 | 含义 |
date | 日期 '2008-12-2' |
time | 时间 '12:25:36' |
datetime | 日期时间 '2008-12-2 22:06:44' |
timestamp | 自动存储记录修改时间 |
MySQL数据类型 | 含义 |
char(n) | 固定长度,最多255个字符 |
varchar(n) | 固定长度,最多65535个字符 |
tinytext | 可变长度,最多255个字符 |
text | 可变长度,最多65535个字符 |
mediumtext | 可变长度,最多2的24次方-1个字符 |
longtext | 可变长度,最多2的32次方-1个字符 |
HAR和VARCHAR都是字符串类型,但它们的存储方式略有不同。
CHAR是定长字符串类型,每个字段的长度在创建时就已经确定,并且长度是固定的。这意味着无论实际存储的字符串长度是多少,它们都会占用相同的空间。例如,如果你将CHAR(3)设置为“abc”,那么它将占用3个字节的空间,即使它实际上只包含3个字符。
另一方面,VARCHAR是变长字符串类型,它的长度是根据实际存储的字符串长度动态调整的。这意味着如果你使用VARCHAR存储“abc”,它会只占用3个字节的空间,而不是固定占用3个字节。
因此,当你知道字符串的长度是固定的或者接近固定的时候,使用CHAR可以节省存储空间。但是,如果你不确定字符串的长度,或者需要存储非常长的字符串,使用VARCHAR可以提高存储效率char类型的字符串检索速度要比varchar类型的快。
VARCHAR和TEXT都是MySQL中的字符串数据类型,但它们在存储大小、性能和应用场景等方面有所不同。
1. 存储大小:VARCHAR最大长度为65,535字符(包括空格),TEXT最大长度为2^31-1字符(包括空格)。text类型不能有默认值。
2. 性能:由于TEXT类型的数据量很大,因此在执行查询操作时可能会导致性能下降。这是因为MySQL必须将整个TEXT列加载到内存中才能进行处理。相比之下,VARCHAR列通常更小,因此查询速度更快。
3. 应用场景:VARCHAR适合存储较短且重复出现的文本值,例如名称、地址、电子邮件地址等;TEXT则适合存储较长且不太常见的文本值,例如博客文章、评论、产品描述等。
总之,在选择使用VARCHAR还是TEXT时,需要考虑数据量、查询频率和性能等因素。
1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。
2._BLOB存储的数据只能整体读出。
3._TEXT可以指定字符集,_BLO不用指定字符集。
MySQL数据类型 | 含义 |
BIT(M)
|
位字段类型 ,大约 (M+7)/8
字节
|
BINARY(M)
|
固定长度二进制字符串 ,M 字节
|
VARBINARY (M)
|
可变长度二进制字符串 ,M+1 字节
|
TINYBLOB (M)
|
非常小的
BLOB ,L+1 字节,在此,
L<2^8
|
BLOB (M)
|
小
BLOB ,L+2 字节,在此,
L<2^16
|
MEDIUMBLOB (M)
|
中等大小的
BLOB ,L+3 字节,在此,
L<2^24
|
LONGBLOB (M)
|
非常大的
BLOB ,L+4 字节,在此,
L<2^32
|
位字段类型。 M 表示每个值的位数,范围为 1 ~ 64 。如果 M 被省略,默认值为 1 。如果为 BIT(M) 列分配的值的长度小于 M 位,在值的左边用 0 填充。例如,为 BIT(6) 列分配一个值 b'101' ,其效果与分配b'000101' 相同。BIT 数据类型用来保存位字段值,例如以二进制的形式保存数据 13 , 13 的二进制形式为 1101 ,在这里需要位数至少为 4 位的 BIT 类型,即可以定义列类型为 BIT(4) 。大于二进制 1111 的数据是不能插入 BIT(4)类型的字段中的。
MySQL支持两种复合类型,分别是enum类型和set类型。
Enum类型:可以将一组固定的值作为一个单元来处理,这些值在定义时必须明确给出。例如,可以使用 enum 类型来表示性别(男、女)或者状态(成功、失败、等待)等。
- -- enum类型的创建和插入数据
- -- enum类型只能接受固定列表中的某个值
- CREATE TABLE person (id INT, gender ENUM('male', 'female'));
- INSERT INTO person VALUES(1, 'male');
- SELECT * FROM person;
-
- +----+--------+
- | id | gender |
- +----+--------+
- | 1 | male |
- +----+--------+
Set类型:与 enum 类似,但是 set 类型允许存放多个值,并且可以通过逻辑运算符(AND、OR、NOT)来操作这些值。例如,可以使用 set 类型来表示一个人的兴趣爱好(篮球、足球、乒乓球、羽毛球)。
- -- set类型的创建和插入数据
- -- set类型可以接受多个值,并且可以进行逻辑运算
- CREATE TABLE hobby (hobby SET('basketball','football','pingpong','badminton'));
- INSERT INTO hobby VALUES ('basketball'),('basketball, pingpong'),('football, badminton');
- SELECT * FROM hobby;
-
- +--------------+
- | hobby |
- +--------------+
- | basketball |
- | basketball, pingpong |
- | football, badminton |
- +--------------+
需要注意的是,enum 和 set 类型都不能使用 NULL 值,也不能使用空字符串。同时,它们也没有顺序的概念,即它们的值不是按照定义的顺序排列的。
json 是一种特殊字符串,轻量级的数据格式,不同程序不同语言数据交换格式。JSON : JavaScript Object Notation, JS 对象简谱 ) 是一种轻量级的数据交换格式。它基于ECMAScript ( 欧洲计算机协会制定的 js 规范 ) 的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。mysql 从 5.7 开始增加了 json 新的数据类型,此类型非常灵活。
- -- 以下是关于MySQL中JSON数据类型的更多示例:
-
- -- 创建表
-
- CREATE TABLE `tableName` (`col1` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `col2` VARCHAR(45), `data` JSON DEFAULT NULL);
-
- INSERT INTO `tableName`(`col1`, `col2`) VALUES (NULL, 'test data'), (NULL, 'other test data');
- SELECT * FROM `tableName`;
- +----+--------+---------------------+
- | col1| col2 | data |
- +----+--------+---------------------+
- | 1| test data| NULL |
- | 2| other test data| NULL |
- +----+--------+---------------------+
-
-
- UPDATE `tableName` SET `data`=CAST('[ { "a":"A", "b":"B"},{ "c":"C"} ]' AS JSON) WHERE `col1`='1';
- SELECT * FROM `tableName`;
- +----+--------+---------------------+
- | col1| col2 | data |
- +----+--------+---------------------+
- | 1| test data| [ {"a":"A","b":"B"},{"c":"C"} ] |
- | 2| other test data| NULL |
- +----+--------+---------------------+
-
- DELETE FROM `tableName` WHERE `col1`='2';
- SELECT * FROM `tableName`;
- +----+--------+---------------------+
- | col1| col2 | data |
- +----+--------+---------------------+
- | 1| test data| [ {"a":"A","b":"B"},{"c":"C"} ] |
- +----+--------+---------------------+
- ```
-
- -- 获取指定属性值
-
- select CAST(JSON_UNQUOTE(JSON_EXTRACT("{\"a\":\"A\", \"b\":\"B\", \"c\":\"C\"}", "$.")) as CHAR) from dual limit 1;
- // output: A
-
- select CAST(JSON_UNQUOTE(JSON_EXTRACT("{\"a\":\"A\", \"b\":\"B\", \"c\":\"C\"}", "$.d")) as CHAR) from dual limit 1;
- // output: NULL
-
- select CAST(JSON_UNQUOTE(JSON_SEARCH("{\"a\":\"A\", \"b\":\"B\", \"c\":\"C\"}", "one", "all", "$[*].*"))) as CHAR from dual limit 1;
- // output: B
-
- select CAST(JSON_UNQUOTE(JSON_SEARCH("{\"a\":\"A\", \"b\":\"B\", \"c\":\"C\"}", "one", "all", "$[?(@.c)].*"))) as CHAR from dual limit 1;
- // output: C
-
-
- -- 修改指定属性值
-
-
- create or replace function set_key_val() returns string soname 'libset_key_value.so';
-
- -- set a new value to the existing object with specific path
- update t1 set jdoc = set_key_val(jdoc,'$["fruit"]', '"apple"') where k = 1 and v = 9876543210;
- delete from t1 where k in (1,2,3,4,5);
- insert into t1 values ('1','1000000000',cast('{"animal":"cat", "color":"blue", "num":1}' as JSON));
- insert into t1 values ('2','1000000001',cast('{"animal":"dog", "food":"meat", "price":12.50}' as JSON));
- insert into t1 values ('3','1000000002',cast('{"toy":"ball", "owner":"john", "num":3}' as JSON));
- insert into t1 values ('4','1000000003',cast('{"animal":"snake", "food":"mice", "length":2}"' as JSON));
- insert into t1 values ('5','1000000004',cast('{"vehicle":"car", "speed":"fast", "manufacturer":"Honda" }' as JSON));
- commit;
-
- select * from t1;
- -+---------------+------+---------------------------------------------------------+
- | k | v | jdoc |
- +---------------+------+---------------------------------------------------------+
- | 1 | 1000000000 | {"animal":"cat", "color":"blue", "num":1,"fruit":"apple"} |
- | 2 | 1000000001 | {"animal":"dog", "food":"meat", "price":12.50} |
- | 3 | 1000000002 | {"toy":"ball", "owner":"john", "num":3} |
- | 4 | 1000000003 | {"animal":"snake", "food":"mice", "length":2} |
- | 5 | 1000000004 | {"vehicle":"car", "speed":"fast", "manufacturer":"Honda"} |
- +---------------+------+---------------------------------------------------------+
-
- -- add a new property at root level of an existing document
- update t1 set jdoc = set_key_val(jdoc,'$','"hello world!"') where k between 1 and 5;
- commit;
-
- select * from t1;
- -+---------------+------+----------------------------------------------------------------------------------+
- | k | v | jdoc |
- +---------------+------+----------------------------------------------------------------------------------+
- | 1 | 1000000000 | {"hello world!", "animal":"cat", "color":"blue", "num":1,"fruit":"apple"} |
- | 2 | 1000000001 | {"hello world!", "animal":"dog", "food":"meat", "price":12.50} |
- | 3 | 1000000002 | {"hello world!", "toy":"ball", "owner":"john", "num":3} |
- | 4 | 1000000003 | {"hello world!", "animal":"snake", "food":"mice", "length":2} |
- | 5 | 1000000004 | {"hello world!", "vehicle":"car", "speed":"fast", "manufacturer":"Honda"} |
- +---------------+------+----------------------------------------------------------------------------------+
- ```
-
- -- 使用JSONPATH查询
-
-
- select * from employees where department = $['department']
- select * from employees where department like '%Json%'
- select * from employees where department is Json
- select * from employees where department contains Json
- select * from employees where department matches Json
-
-
- -- 使用JSONPATH进行查询
-
-
- select * from employees where department @> department like '{'department': ['department']
- select * from employees where department @> department contains 'department'
-
- select * from employees where department matches '[]'
-
MySQL的JSON数据类型允许您将复杂的数据结构存储在单个字段中,从而简化您的数据模型。您可以使用JSON数据类型来存储嵌套对象、数组和混合数据类型。此外,MySQL还提供了许多操作JSON数据的内置函数,如`JSON_EXTRACT()`、`JSON_OBJECT()`等。
- --这个例子中,我们创建了一个名为`users`的表,它有三个字段:`id`(主键)、`name`(不能为空)和`info`(默认为空JSON对象)
- create table users (
- id int auto_increment primary key,
- name varchar(256) not null,
- info json not null default "{}",
- created timestamp default current_timestamp on update current_timestamp);
- insert into users values (null, "John Doe", '{"age":30}');
- select * from users where info->"$.age" = 30;
-
- -- 第一条语句将一个包含年龄信息的JSON对象插入到`info`字段中。
- -- 第二条语句使用JSON路径表达式查找所有年龄在30岁的用户。
MySQL关键字 | 含义 |
NULL | 数据列可包含NULL值 |
NOT NULL | 数据列不允许包含NULL值 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键 |
AUTO_INCREMENT | 自动递增,适用于整数类型 |
UNSIGNED | 无符号 |
CHARACTER SET name | 指定一个字符集 |
数据类型 | 字节长度 | 范围或用法 |
Bit | 1 | 无符号[0,255],有符号[-128,127],天缘博客备注:BIT和BOOL布尔型都占用1字节 |
TinyInt | 1 | 整数[0,255] |
SmallInt | 2 | 无符号[0,65535],有符号[-32768,32767] |
MediumInt | 3 | 无符号[0,2^24-1],有符号[-2^23,2^23-1]] |
Int | 4 | 无符号[0,2^32-1],有符号[-2^31,2^31-1] |
BigInt | 8 | 无符号[0,2^64-1],有符号[-2^63 ,2^63 -1] |
Float(M,D) | 4 | 单精度浮点数。天缘博客提醒这里的D是精度,如果D<=24则为默认的FLOAT,如果D>24则会自动被转换为DOUBLE型。 |
Double(M,D) | 8 | 双精度浮点。 |
Decimal(M,D) | M+1或M+2 | 未打包的浮点数,用法类似于FLOAT和DOUBLE,天缘博客提醒您如果在ASP中使用到Decimal数据类型,直接从数据库读出来的Decimal可能需要先转换成Float或Double类型后再进行运算。 |
Date | 3 | 以YYYY-MM-DD的格式显示,比如:2009-07-19 |
Date Time | 8 | 以YYYY-MM-DD HH:MM:SS的格式显示,比如:2009-07-19 11:22:30 |
TimeStamp | 4 | 以YYYY-MM-DD的格式显示,比如:2009-07-19 |
Time | 3 | 以HH:MM:SS的格式显示。比如:11:22:30 |
Year | 1 | 以YYYY的格式显示。比如:2009 |
Char(M) | M | 定长字符串。 |
VarChar(M) | M | 变长字符串,要求M<=255 |
Binary(M) | M | 类似Char的二进制存储,特点是插入定长不足补0 |
VarBinary(M) | M | 类似VarChar的变长二进制存储,特点是定长不补0 |
Tiny Text | Max:255 | 大小写不敏感 |
Text | Max:64K | 大小写不敏感 |
Medium Text | Max:16M | 大小写不敏感 |
Long Text | Max:4G | 大小写不敏感 |
TinyBlob | Max:255 | 大小写敏感 |
Blob | Max:64K | 大小写敏感 |
MediumBlob | Max:16M | 大小写敏感 |
LongBlob | Max:4G | 大小写敏感 |
Enum | 1或2 | 最大可达65535个不同的枚举值 |
Set | 可达8 | 最大可达64个不同的值 |
Geometry | ||
Point | ||
LineString | ||
Polygon | ||
MultiPoint | ||
MultiLineString | ||
MultiPolygon | ||
GeometryCollection |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。