当前位置:   article > 正文

MySQL数据库数据类型_mysql数据库类型

mysql数据库类型

目录

数值类型

整型

浮点型(float和double)

定点数

日期和时间类型

字符串(字符)类型

char和varchar:

varchar和text

二进制数据(_Blob)

复合类型

json

数据类型的属性

MYSQL数据类型字节长度一览表


MySQL支持多种数据类型,大致可以分为以下几类:

  • 数值类型(整数类型、浮点数类型和定点数类型)
  • 日期和时间类型
  • 字符串(字符)类型
  • 二进制类型
  • 复合类型
  • json
数值类型
整型

取值范围如果加了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和double)

设一个字段定义为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个字符
char和varchar:

HAR和VARCHAR都是字符串类型,但它们的存储方式略有不同。

CHAR是定长字符串类型,每个字段的长度在创建时就已经确定,并且长度是固定的。这意味着无论实际存储的字符串长度是多少,它们都会占用相同的空间。例如,如果你将CHAR(3)设置为“abc”,那么它将占用3个字节的空间,即使它实际上只包含3个字符。

另一方面,VARCHAR是变长字符串类型,它的长度是根据实际存储的字符串长度动态调整的。这意味着如果你使用VARCHAR存储“abc”,它会只占用3个字节的空间,而不是固定占用3个字节。

因此,当你知道字符串的长度是固定的或者接近固定的时候,使用CHAR可以节省存储空间。但是,如果你不确定字符串的长度,或者需要存储非常长的字符串,使用VARCHAR可以提高存储效率

char类型的字符串检索速度要比varchar类型的快。

varchar和text

VARCHAR和TEXT都是MySQL中的字符串数据类型,但它们在存储大小、性能和应用场景等方面有所不同。

1. 存储大小:VARCHAR最大长度为65,535字符(包括空格),TEXT最大长度为2^31-1字符(包括空格)。text类型不能有默认值。

2. 性能:由于TEXT类型的数据量很大,因此在执行查询操作时可能会导致性能下降。这是因为MySQL必须将整个TEXT列加载到内存中才能进行处理。相比之下,VARCHAR列通常更小,因此查询速度更快。

3. 应用场景:VARCHAR适合存储较短且重复出现的文本值,例如名称、地址、电子邮件地址等;TEXT则适合存储较长且不太常见的文本值,例如博客文章、评论、产品描述等。

总之,在选择使用VARCHAR还是TEXT时,需要考虑数据量、查询频率和性能等因素。

二进制数据(_Blob)

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 类型来表示性别(男、女)或者状态(成功、失败、等待)等。

  1. -- enum类型的创建和插入数据
  2. -- enum类型只能接受固定列表中的某个值
  3. CREATE TABLE person (id INT, gender ENUM('male', 'female'));
  4. INSERT INTO person VALUES(1, 'male');
  5. SELECT * FROM person;
  6. +----+--------+
  7. | id | gender |
  8. +----+--------+
  9. | 1 | male |
  10. +----+--------+

Set类型:与 enum 类似,但是 set 类型允许存放多个值,并且可以通过逻辑运算符(AND、OR、NOT)来操作这些值。例如,可以使用 set 类型来表示一个人的兴趣爱好(篮球、足球、乒乓球、羽毛球)。

  1. -- set类型的创建和插入数据
  2. -- set类型可以接受多个值,并且可以进行逻辑运算
  3. CREATE TABLE hobby (hobby SET('basketball','football','pingpong','badminton'));
  4. INSERT INTO hobby VALUES ('basketball'),('basketball, pingpong'),('football, badminton');
  5. SELECT * FROM hobby;
  6. +--------------+
  7. | hobby |
  8. +--------------+
  9. | basketball |
  10. | basketball, pingpong |
  11. | football, badminton |
  12. +--------------+

需要注意的是,enum 和 set 类型都不能使用 NULL 值,也不能使用空字符串。同时,它们也没有顺序的概念,即它们的值不是按照定义的顺序排列的。

json
json 是一种特殊字符串,轻量级的数据格式,不同程序不同语言数据交换格式。
JSON JavaScript Object Notation, JS 对象简谱 ) 是一种轻量级的数据交换格式。它基于
ECMAScript ( 欧洲计算机协会制定的 js 规范 ) 的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
mysql 5.7 开始增加了 json 新的数据类型,此类型非常灵活。
  1. -- 以下是关于MySQL中JSON数据类型的更多示例:
  2. -- 创建表
  3. CREATE TABLE `tableName` (`col1` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `col2` VARCHAR(45), `data` JSON DEFAULT NULL);
  4. INSERT INTO `tableName`(`col1`, `col2`) VALUES (NULL, 'test data'), (NULL, 'other test data');
  5. SELECT * FROM `tableName`;
  6. +----+--------+---------------------+
  7. | col1| col2 | data |
  8. +----+--------+---------------------+
  9. | 1| test data| NULL |
  10. | 2| other test data| NULL |
  11. +----+--------+---------------------+
  12. UPDATE `tableName` SET `data`=CAST('[ { "a":"A", "b":"B"},{ "c":"C"} ]' AS JSON) WHERE `col1`='1';
  13. SELECT * FROM `tableName`;
  14. +----+--------+---------------------+
  15. | col1| col2 | data |
  16. +----+--------+---------------------+
  17. | 1| test data| [ {"a":"A","b":"B"},{"c":"C"} ] |
  18. | 2| other test data| NULL |
  19. +----+--------+---------------------+
  20. DELETE FROM `tableName` WHERE `col1`='2';
  21. SELECT * FROM `tableName`;
  22. +----+--------+---------------------+
  23. | col1| col2 | data |
  24. +----+--------+---------------------+
  25. | 1| test data| [ {"a":"A","b":"B"},{"c":"C"} ] |
  26. +----+--------+---------------------+
  27. ```
  28. -- 获取指定属性值
  29. select CAST(JSON_UNQUOTE(JSON_EXTRACT("{\"a\":\"A\", \"b\":\"B\", \"c\":\"C\"}", "$.")) as CHAR) from dual limit 1;
  30. // output: A
  31. select CAST(JSON_UNQUOTE(JSON_EXTRACT("{\"a\":\"A\", \"b\":\"B\", \"c\":\"C\"}", "$.d")) as CHAR) from dual limit 1;
  32. // output: NULL
  33. select CAST(JSON_UNQUOTE(JSON_SEARCH("{\"a\":\"A\", \"b\":\"B\", \"c\":\"C\"}", "one", "all", "$[*].*"))) as CHAR from dual limit 1;
  34. // output: B
  35. select CAST(JSON_UNQUOTE(JSON_SEARCH("{\"a\":\"A\", \"b\":\"B\", \"c\":\"C\"}", "one", "all", "$[?(@.c)].*"))) as CHAR from dual limit 1;
  36. // output: C
  37. -- 修改指定属性值
  38. create or replace function set_key_val() returns string soname 'libset_key_value.so';
  39. -- set a new value to the existing object with specific path
  40. update t1 set jdoc = set_key_val(jdoc,'$["fruit"]', '"apple"') where k = 1 and v = 9876543210;
  41. delete from t1 where k in (1,2,3,4,5);
  42. insert into t1 values ('1','1000000000',cast('{"animal":"cat", "color":"blue", "num":1}' as JSON));
  43. insert into t1 values ('2','1000000001',cast('{"animal":"dog", "food":"meat", "price":12.50}' as JSON));
  44. insert into t1 values ('3','1000000002',cast('{"toy":"ball", "owner":"john", "num":3}' as JSON));
  45. insert into t1 values ('4','1000000003',cast('{"animal":"snake", "food":"mice", "length":2}"' as JSON));
  46. insert into t1 values ('5','1000000004',cast('{"vehicle":"car", "speed":"fast", "manufacturer":"Honda" }' as JSON));
  47. commit;
  48. select * from t1;
  49. -+---------------+------+---------------------------------------------------------+
  50. | k | v | jdoc |
  51. +---------------+------+---------------------------------------------------------+
  52. | 1 | 1000000000 | {"animal":"cat", "color":"blue", "num":1,"fruit":"apple"} |
  53. | 2 | 1000000001 | {"animal":"dog", "food":"meat", "price":12.50} |
  54. | 3 | 1000000002 | {"toy":"ball", "owner":"john", "num":3} |
  55. | 4 | 1000000003 | {"animal":"snake", "food":"mice", "length":2} |
  56. | 5 | 1000000004 | {"vehicle":"car", "speed":"fast", "manufacturer":"Honda"} |
  57. +---------------+------+---------------------------------------------------------+
  58. -- add a new property at root level of an existing document
  59. update t1 set jdoc = set_key_val(jdoc,'$','"hello world!"') where k between 1 and 5;
  60. commit;
  61. select * from t1;
  62. -+---------------+------+----------------------------------------------------------------------------------+
  63. | k | v | jdoc |
  64. +---------------+------+----------------------------------------------------------------------------------+
  65. | 1 | 1000000000 | {"hello world!", "animal":"cat", "color":"blue", "num":1,"fruit":"apple"} |
  66. | 2 | 1000000001 | {"hello world!", "animal":"dog", "food":"meat", "price":12.50} |
  67. | 3 | 1000000002 | {"hello world!", "toy":"ball", "owner":"john", "num":3} |
  68. | 4 | 1000000003 | {"hello world!", "animal":"snake", "food":"mice", "length":2} |
  69. | 5 | 1000000004 | {"hello world!", "vehicle":"car", "speed":"fast", "manufacturer":"Honda"} |
  70. +---------------+------+----------------------------------------------------------------------------------+
  71. ```
  72. -- 使用JSONPATH查询
  73. select * from employees where department = $['department']
  74. select * from employees where department like '%Json%'
  75. select * from employees where department is Json
  76. select * from employees where department contains Json
  77. select * from employees where department matches Json
  78. -- 使用JSONPATH进行查询
  79. select * from employees where department @> department like '{'department': ['department']
  80. select * from employees where department @> department contains 'department'
  81. select * from employees where department matches '[]'

MySQL的JSON数据类型允许您将复杂的数据结构存储在单个字段中,从而简化您的数据模型。您可以使用JSON数据类型来存储嵌套对象、数组和混合数据类型。此外,MySQL还提供了许多操作JSON数据的内置函数,如`JSON_EXTRACT()`、`JSON_OBJECT()`等。

以下是一个简单的MySQL JSON数据类型的例子:
  1. --这个例子中,我们创建了一个名为`users`的表,它有三个字段:`id`(主键)、`name`(不能为空)和`info`(默认为空JSON对象)
  2. create table users (
  3. id int auto_increment primary key,
  4. name varchar(256) not null,
  5. info json not null default "{}",
  6. created timestamp default current_timestamp on update current_timestamp);
  1. insert into users values (null, "John Doe", '{"age":30}');
  2. select * from users where info->"$.age" = 30;
  3. -- 第一条语句将一个包含年龄信息的JSON对象插入到`info`字段中。
  4. -- 第二条语句使用JSON路径表达式查找所有年龄在30岁的用户。
数据类型的属性
MySQL关键字含义
NULL数据列可包含NULL值
NOT NULL数据列不允许包含NULL值
DEFAULT默认值
PRIMARY KEY主键
AUTO_INCREMENT自动递增,适用于整数类型
UNSIGNED无符号
CHARACTER SET name指定一个字符集
MYSQL数据类型字节长度一览表
数据类型字节长度范围或用法
Bit1无符号[0,255],有符号[-128,127],天缘博客备注:BIT和BOOL布尔型都占用1字节
TinyInt1整数[0,255]
SmallInt2无符号[0,65535],有符号[-32768,32767]
MediumInt3无符号[0,2^24-1],有符号[-2^23,2^23-1]]
Int4无符号[0,2^32-1],有符号[-2^31,2^31-1]
BigInt8无符号[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类型后再进行运算。
Date3以YYYY-MM-DD的格式显示,比如:2009-07-19
Date Time8以YYYY-MM-DD HH:MM:SS的格式显示,比如:2009-07-19 11:22:30
TimeStamp4以YYYY-MM-DD的格式显示,比如:2009-07-19
Time3以HH:MM:SS的格式显示。比如:11:22:30
Year1以YYYY的格式显示。比如:2009
Char(M)M

定长字符串。

VarChar(M)M变长字符串,要求M<=255
Binary(M)M类似Char的二进制存储,特点是插入定长不足补0
VarBinary(M)M类似VarChar的变长二进制存储,特点是定长不补0
Tiny TextMax:255大小写不敏感
TextMax:64K大小写不敏感
Medium TextMax:16M大小写不敏感
Long TextMax:4G大小写不敏感
TinyBlobMax:255大小写敏感
BlobMax:64K大小写敏感
MediumBlobMax:16M大小写敏感
LongBlobMax:4G大小写敏感
Enum1或2最大可达65535个不同的枚举值
Set可达8最大可达64个不同的值
Geometry
Point
LineString
Polygon
MultiPoint
MultiLineString
MultiPolygon
GeometryCollection

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/782089
推荐阅读
相关标签
  

闽ICP备14008679号