首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

Mysql之数据类型(胖胖老师)

2023-11-11 来源:华拓网

like语句与通配符insert into teacher_1 values(‘胖胖‘, ‘男‘, 18),(‘小明‘, ‘男‘, 19),(‘张三‘, ‘男‘, 30),(‘李四‘, ‘男‘, 27),(‘张成‘, ‘男‘, 21),(‘三胖‘, ‘女‘, 31),(‘张三丰‘, ‘男‘, 66),(‘张‘, ‘男‘, 11),(‘王_白‘, ‘男‘, 14),(‘王大白‘, ‘男‘, 19);需求一: 查询出姓张的人;select * from teacher_1 where name like ‘张%‘;   --%表示配置0个或者多个任意字符需求二: 查询出名字中第二个字符是‘胖‘的人;select * from teacher_1 where name like ‘_胖%‘;ps: %表示配置0个或者多个任意字符, _表示配置一个任意字符需求三: 查询出 名字中第一个和第二个字符是 ‘王‘和‘_‘ 的那个人;select * from teacher_1 where name like ‘王/_%‘ escape ‘/‘;select * from teacher_1 where name like ‘王\_%‘;***********************************************************************************************************************数据类型1: 数值类型2: 日期类型3: 字符串类型***********************************************************************************************************************1: 整形tinyint类型tinyint如果有符号范围则是(-128, 127), 如果无符号范围则是(0, 255);可以使用unsigned标识来定义是否符号, 加上unsigned标识则表示无符号, 默认是有符号的create table t_1(    a tinyint,    b tinyint unsigned);例: insert into t_1 values(-128, 127);例: insert into t_1 values(-128, -1);    --报错例: insert into t_1 values(255, 255);    --报错例: insert into t_1 values(-128, 255);定义数据的显示宽度create table t_2(    a tinyint(2));ps: 类型(2), 比如tinyint(2), (2)并不是表示最大只能输入2位数字的值;    而是表示显示的最小宽度是多少, 如果想要达到显示最小宽度的目的,还需要使用zerofill(前导零填充)来标识例: insert into t_2 values(123);例: insert into t_2 values(1);alter table t_2 add b tinyint(2) zerofill;例: insert into t_2(b) values(2);例: insert into t_2(b) values(123);例: insert into t_2(b) values(-1);    --报错, 标识了zerofill后 也会默认加上一个unsigned;2: 小数型浮点类型float(单精度), double(双精度)create table t_3(    a float,    b double);例: insert into t_3(a, b) values(1234567890.123456789,1234567890.123456789);    +------------+--------------------+    | a          | b                  |    +------------+--------------------+    | 1234570000 | 1234567890.1234567 |    +------------+--------------------+    ps: float与double类型虽然可以表示一个很大的小数, 但是如果值超过精度位数,这里则会损失精度        float默认精度位数是6位左右, double默认的精度位数是17左右;create table t_4(    a float(4) zerofill);insert into t_4 values(12);insert into t_4 values(12345);create table t_5(    a float(6, 2));ps: 浮点型(M,D) 比如float(6, 2) 这里的6表示的是能够最大的所有位数(不包括符号和小数号), 2表示最大小数位数例: insert into t_5 values(1234.56);例: insert into t_5 values(123.56);例: insert into t_5 values(123.5);例: insert into t_5 values(12345.6);         --报错例: insert into t_5 values(1234.128);        --不报错,但会把多余的小数以四舍五入的方式截取掉定点数类型(decimal)ps: decimal(M,D)定点数型依赖于M和D, M的默认值是10, D的默认值是0; M一样表示总数位, D表示小数位  总数create table t_6(    a decimal(21, 2) zerofill);例: insert into t_6 values(123456789123456789.12);    +------------------------+    | a                      |    +------------------------+    | 0123456789123456789.12 |    +------------------------+***********************************************************************************************************************日期类型datetime(年月日时分秒)与timestamp类型(时间戳)create table t_7(    a datetime,    b timestamp);例: insert into t_7 values(‘2012-08-08 08:08:08‘, 54389867575365); --报错, 时间戳存储时是整形,但是表示是日期型例: insert into t_7 values(‘2012-08-08 08:08:08‘, ‘2012-08-08 08:08:08‘);例: select a+0, b+0 from t_7;   --在检索时如果列+0, 时间的格式会整形来显示    +-----------------------+----------------+    | a+0                   | b+0            |    +-----------------------+----------------+    | 20120808080808.000000 | 20120808080808 |    +-----------------------+----------------+例: insert into t_7 values(‘2012-08-08 08:08:08‘, ‘2038-01-20‘);   --报错例: insert into t_7 values(‘2012-08-08 08:08:08‘, ‘2038-01-19‘);   --不报错例: insert into t_7 values(‘2012*08*08‘, ‘2038*01*19‘);            --支持任意的分隔符日期例: insert into t_7 values(‘20120808‘, ‘20380119‘);                --也可以不用写分隔符例:insert into t_7 values(‘20128808‘, ‘20380119‘);                --报错Date类型create table t_t(    a date,    b datetime);例: insert into t_t values(‘2012-08-08 08:08:08‘, ‘2012-08-08 08:08:08‘);ps: Date类型是以YYYY-MM-DD形式显示日期, datetime以年月日时分秒形式来显示日期Time类型(D HH:MM:SS) D表示天ps: Time表示的一天中的日间create table t_8(    a time);例: insert into t_8 values(‘2 08:08:08‘);例: insert into t_8 values(‘99:08:08‘);例: insert into t_8 values(‘990808‘);例:insert into t_8 values(‘99-08-08‘);     --报错year类型create table t_9(    a year);例: insert into t_9 values(‘1901‘);例: insert into t_9 values(‘1900‘);***********************************************************************************************************************3: 字符串类型char(M)     M表示严格限定的长度varchar(M)  M表示允许的最大长度;create table t_10(    c char(4),    v varchar(4));例: insert into t_10 values(‘ab‘, ‘ab‘);例: insert into t_10 values(‘ab‘, ‘abcde‘);   --报错例: insert into t_10 values(‘abcde‘, ‘ab‘);   --报错Text类型(长文本类型)--还有tinyText, longTextcreate table t_11(    a text,    b tinytext);enum枚举类型create table t_12(    sex enum(‘男‘,‘女‘,‘保密‘));例: insert into t_12 values(‘不男不女‘);例: insert into t_12 values(‘男‘);set集合类型create table t_13(    hobby set(‘eat‘, ‘drink‘, ‘sleep‘));例: insert into t_13 values(‘eat,sleep‘);例:insert into t_13 values(‘eat,sleep,drink‘);例:insert into t_13 values(‘eat,sleep, drink‘);    --报错 不要有空格例:insert into t_13 values(‘eat,sleep,胖胖‘);      --胖胖

Mysql之数据类型(胖胖老师)

标签:ima   个人   配置   0.12   数据类型   esc   定义   cap   tab   

小编还为您整理了以下内容,可能对您也有帮助:

mysql常用的数据类型有哪些

mysql数据类型有:

MySQL支持的数据类型在几类:数值类型,日期和时间类型和字符串(字符)类型。

数据类型:

注意:

  • 在定义字段是我们经常使用 num int(10) unsigned 这种写法,其中的 int(10) 并不是表示该字段会存储10个长度的数字。

  • int(M) 表示的是数字显示的格式,并且只能在字段属性设置了zerofill时才有效。

  • eg:

    tinyint(4) -- 实际存储值为2, 如果没有指定zerofill,查询得到的结果就是 2, 如果指定了zerofill,则查询结果就是 0002,左边使用0来进行填充;

    zerofill属性:

  • 如果字段指定了zerofill属性,mysql会自动为字段加上UNSIGNED 属性。

  • 当涉及列表达式或UNION查询中时,ZEROFILL属性将被忽略

  • 浮点型:

    Float(M,D):M为数字的位数,包含了整数部分和小数部分;D为小数部分,【D <= M-2】; 如果等于则整数部分为0,最大的值也就是0.99

        eg:

  • Float(2,1) -- 表示一位整数和一位小数,eg:1.1

  • Float(1,2) -- 语法错误,总共才1位 怎么可能有2位小数

  • 关于默认值:

  • 默认值必须是一个常亮,不能函数或者表达式。例外:TIMESTAMP的默认值可以使用CURRENT_TIMESTAMP

  • BLOB and TEXT 不能设置默认值

  • 如果一个列不明确的指出默认是是多少的情况下:

  • 如果数据库为strict mode 模式下,则会报错

  • 如果模式不处于strict mode模式,系统会根据类型来确认使用何种默认值

  • 日期和时间格式:

    表示时间值的日期和时间类型是日期时间(DATATIME)、日期(DATA)、时间戳(TIMESTAMP)、时间(TIME)和年份(YEAR)。

    DATATIME范围: '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.

    DATA范围:'1000-01-01' to '9999-12-31'

    TIMESTAMP范围:'1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07'

    TIME范围:'-838:59:59' to '838:59:59'

    YEAR范围:year(4) --- 1901~2155; year(2) --- 00~99

    TIMESTAMP: 时间戳列显示在相同的格式为DATETIME列。换句话说,显示宽度固定为19个字符,格式是'YYYY-MM-DD HH:MM:SS'。

    TIMESTAMP数据类型提供自动初始化和更新。但是只能有一列默认值和更新是 指定为CURRENT_TIMESTAMP

    1、自动初始化和自动更新 eg : ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

    2、只有自动初始化; eg:ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP

    3、只有自动更新; eg:ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP

    4、都没有; eg:ts TIMESTAMP DEFAULT 0

    字符串类型:

    字符串类型是CHAR、VARCHAR、BINARY【二进制数据类型】、BLOB、TEXT【文本类型】、ENUM【枚举类型】和SET【数据集合】。

    char和varchar的区别:存储长度的区别在于最大长度和是否保留空格;

    char会保留空格,varchar不会保留空格

    char为 0~ 255; varchar为 0 ~ 65535

    ENUM: 枚举是一个字符串对象从中明确列举了在创建表时列规范的允许值的列表中选择一个值。【当插入值不能和列表的值惊醒匹配时,默认是最大索引值】

     , ,
    numbers ENUM('0','1','2')
    mysql> INSERT INTO t (numbers) VALUES(2),('2'),('3');mysql> SELECT * FROM t;+---------+| numbers |+---------+| 1 || 2 || 2 |+---------+

    SET: 集是一个对象,该对象可以有零个或多个值的字符串,其中每个必须从列表中选择允许创建表时指定的值。【当插入值不能和列表的值经行匹配时,MYSQL会忽略列表中不存在的值】

    1 CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));2 3 INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

    从定义中可以看出 ENUM和SET的区别在于值是定义时指定的值中的一个还是多个。还有就是在插入值在列表中不存在的表现不一样。

    更多相关免费学习推荐:mysql教程(视频)

    mysql常用的数据类型有哪些

    mysql数据类型有:

    MySQL支持的数据类型在几类:数值类型,日期和时间类型和字符串(字符)类型。

    数据类型:

    注意:

  • 在定义字段是我们经常使用 num int(10) unsigned 这种写法,其中的 int(10) 并不是表示该字段会存储10个长度的数字。

  • int(M) 表示的是数字显示的格式,并且只能在字段属性设置了zerofill时才有效。

  • eg:

    tinyint(4) -- 实际存储值为2, 如果没有指定zerofill,查询得到的结果就是 2, 如果指定了zerofill,则查询结果就是 0002,左边使用0来进行填充;

    zerofill属性:

  • 如果字段指定了zerofill属性,mysql会自动为字段加上UNSIGNED 属性。

  • 当涉及列表达式或UNION查询中时,ZEROFILL属性将被忽略

  • 浮点型:

    Float(M,D):M为数字的位数,包含了整数部分和小数部分;D为小数部分,【D <= M-2】; 如果等于则整数部分为0,最大的值也就是0.99

        eg:

  • Float(2,1) -- 表示一位整数和一位小数,eg:1.1

  • Float(1,2) -- 语法错误,总共才1位 怎么可能有2位小数

  • 关于默认值:

  • 默认值必须是一个常亮,不能函数或者表达式。例外:TIMESTAMP的默认值可以使用CURRENT_TIMESTAMP

  • BLOB and TEXT 不能设置默认值

  • 如果一个列不明确的指出默认是是多少的情况下:

  • 如果数据库为strict mode 模式下,则会报错

  • 如果模式不处于strict mode模式,系统会根据类型来确认使用何种默认值

  • 日期和时间格式:

    表示时间值的日期和时间类型是日期时间(DATATIME)、日期(DATA)、时间戳(TIMESTAMP)、时间(TIME)和年份(YEAR)。

    DATATIME范围: '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.

    DATA范围:'1000-01-01' to '9999-12-31'

    TIMESTAMP范围:'1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07'

    TIME范围:'-838:59:59' to '838:59:59'

    YEAR范围:year(4) --- 1901~2155; year(2) --- 00~99

    TIMESTAMP: 时间戳列显示在相同的格式为DATETIME列。换句话说,显示宽度固定为19个字符,格式是'YYYY-MM-DD HH:MM:SS'。

    TIMESTAMP数据类型提供自动初始化和更新。但是只能有一列默认值和更新是 指定为CURRENT_TIMESTAMP

    1、自动初始化和自动更新 eg : ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

    2、只有自动初始化; eg:ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP

    3、只有自动更新; eg:ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP

    4、都没有; eg:ts TIMESTAMP DEFAULT 0

    字符串类型:

    字符串类型是CHAR、VARCHAR、BINARY【二进制数据类型】、BLOB、TEXT【文本类型】、ENUM【枚举类型】和SET【数据集合】。

    char和varchar的区别:存储长度的区别在于最大长度和是否保留空格;

    char会保留空格,varchar不会保留空格

    char为 0~ 255; varchar为 0 ~ 65535

    ENUM: 枚举是一个字符串对象从中明确列举了在创建表时列规范的允许值的列表中选择一个值。【当插入值不能和列表的值惊醒匹配时,默认是最大索引值】

     , ,
    numbers ENUM('0','1','2')
    mysql> INSERT INTO t (numbers) VALUES(2),('2'),('3');mysql> SELECT * FROM t;+---------+| numbers |+---------+| 1 || 2 || 2 |+---------+

    SET: 集是一个对象,该对象可以有零个或多个值的字符串,其中每个必须从列表中选择允许创建表时指定的值。【当插入值不能和列表的值经行匹配时,MYSQL会忽略列表中不存在的值】

    1 CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));2 3 INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

    从定义中可以看出 ENUM和SET的区别在于值是定义时指定的值中的一个还是多个。还有就是在插入值在列表中不存在的表现不一样。

    更多相关免费学习推荐:mysql教程(视频)

    MYSQL数据库中,常见的数据类型有哪些

    Mysql支持的多种数据类型主要有:数值数据类型、日期/时间类型、字符串类型。 1.整数数据类型及其取值范围:

    类型

    说明

    存储需求(取值范围)

    tinyint 很小整数 1字节([0~255]、[-128~127]); 255=2^8-1;127=2^7-1

    smallint 小整数 2字节(0~65535、-32768~32767) ;65535=2^16-1

    mediumint 中等 3字节(0~16777215) ;16777215=2^24-1

    int(integer) 普通 4字节(0~4294967295) ;4294967295=2^32-1

    bigint 大整数 8字节(0~18446744073709551615);18446744073709551615=2^64-1

    浮点数&定点数:

    mysql中常见的数据类型

    mysql数据类型有:

    MySQL支持的数据类型在几类:数值类型,日期和时间类型和字符串(字符)类型。

    数据类型:

    注意:

  • 在定义字段是我们经常使用 num int(10) unsigned 这种写法,其中的 int(10) 并不是表示该字段会存储10个长度的数字。

  • int(M) 表示的是数字显示的格式,并且只能在字段属性设置了zerofill时才有效。

  • eg:

    tinyint(4) -- 实际存储值为2, 如果没有指定zerofill,查询得到的结果就是 2, 如果指定了zerofill,则查询结果就是 0002,左边使用0来进行填充;

    zerofill属性:

  • 如果字段指定了zerofill属性,mysql会自动为字段加上UNSIGNED 属性。

  • 当涉及列表达式或UNION查询中时,ZEROFILL属性将被忽略

  • 浮点型:

    Float(M,D):M为数字的位数,包含了整数部分和小数部分;D为小数部分,【D <= M-2】; 如果等于则整数部分为0,最大的值也就是0.99

        eg:

  • Float(2,1) -- 表示一位整数和一位小数,eg:1.1

  • Float(1,2) -- 语法错误,总共才1位 怎么可能有2位小数

  • 关于默认值:

  • 默认值必须是一个常亮,不能函数或者表达式。例外:TIMESTAMP的默认值可以使用CURRENT_TIMESTAMP

  • BLOB and TEXT 不能设置默认值

  • 如果一个列不明确的指出默认是是多少的情况下:

  • 如果数据库为strict mode 模式下,则会报错

  • 如果模式不处于strict mode模式,系统会根据类型来确认使用何种默认值

  • 日期和时间格式:

    表示时间值的日期和时间类型是日期时间(DATATIME)、日期(DATA)、时间戳(TIMESTAMP)、时间(TIME)和年份(YEAR)。

    DATATIME范围: '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.

    DATA范围:'1000-01-01' to '9999-12-31'

    TIMESTAMP范围:'1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07'

    TIME范围:'-838:59:59' to '838:59:59'

    YEAR范围:year(4) --- 1901~2155; year(2) --- 00~99

    TIMESTAMP: 时间戳列显示在相同的格式为DATETIME列。换句话说,显示宽度固定为19个字符,格式是'YYYY-MM-DD HH:MM:SS'。

    TIMESTAMP数据类型提供自动初始化和更新。但是只能有一列默认值和更新是 指定为CURRENT_TIMESTAMP

    1、自动初始化和自动更新 eg : ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

    2、只有自动初始化; eg:ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP

    3、只有自动更新; eg:ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP

    4、都没有; eg:ts TIMESTAMP DEFAULT 0

    字符串类型:

    字符串类型是CHAR、VARCHAR、BINARY【二进制数据类型】、BLOB、TEXT【文本类型】、ENUM【枚举类型】和SET【数据集合】。

    char和varchar的区别:存储长度的区别在于最大长度和是否保留空格;

    char会保留空格,varchar不会保留空格

    char为 0~ 255; varchar为 0 ~ 65535

    ENUM: 枚举是一个字符串对象从中明确列举了在创建表时列规范的允许值的列表中选择一个值。【当插入值不能和列表的值惊醒匹配时,默认是最大索引值】

     , ,
    numbers ENUM('0','1','2')
    mysql> INSERT INTO t (numbers) VALUES(2),('2'),('3');mysql> SELECT * FROM t;+---------+| numbers |+---------+| 1 || 2 || 2 |+---------+

    SET: 集是一个对象,该对象可以有零个或多个值的字符串,其中每个必须从列表中选择允许创建表时指定的值。【当插入值不能和列表的值经行匹配时,MYSQL会忽略列表中不存在的值】

    1 CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));2 3 INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

    从定义中可以看出 ENUM和SET的区别在于值是定义时指定的值中的一个还是多个。还有就是在插入值在列表中不存在的表现不一样。

    更多相关免费学习推荐:mysql教程(视频)

    mysql中常见的数据类型

    mysql数据类型有:

    MySQL支持的数据类型在几类:数值类型,日期和时间类型和字符串(字符)类型。

    数据类型:

    注意:

  • 在定义字段是我们经常使用 num int(10) unsigned 这种写法,其中的 int(10) 并不是表示该字段会存储10个长度的数字。

  • int(M) 表示的是数字显示的格式,并且只能在字段属性设置了zerofill时才有效。

  • eg:

    tinyint(4) -- 实际存储值为2, 如果没有指定zerofill,查询得到的结果就是 2, 如果指定了zerofill,则查询结果就是 0002,左边使用0来进行填充;

    zerofill属性:

  • 如果字段指定了zerofill属性,mysql会自动为字段加上UNSIGNED 属性。

  • 当涉及列表达式或UNION查询中时,ZEROFILL属性将被忽略

  • 浮点型:

    Float(M,D):M为数字的位数,包含了整数部分和小数部分;D为小数部分,【D <= M-2】; 如果等于则整数部分为0,最大的值也就是0.99

        eg:

  • Float(2,1) -- 表示一位整数和一位小数,eg:1.1

  • Float(1,2) -- 语法错误,总共才1位 怎么可能有2位小数

  • 关于默认值:

  • 默认值必须是一个常亮,不能函数或者表达式。例外:TIMESTAMP的默认值可以使用CURRENT_TIMESTAMP

  • BLOB and TEXT 不能设置默认值

  • 如果一个列不明确的指出默认是是多少的情况下:

  • 如果数据库为strict mode 模式下,则会报错

  • 如果模式不处于strict mode模式,系统会根据类型来确认使用何种默认值

  • 日期和时间格式:

    表示时间值的日期和时间类型是日期时间(DATATIME)、日期(DATA)、时间戳(TIMESTAMP)、时间(TIME)和年份(YEAR)。

    DATATIME范围: '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.

    DATA范围:'1000-01-01' to '9999-12-31'

    TIMESTAMP范围:'1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07'

    TIME范围:'-838:59:59' to '838:59:59'

    YEAR范围:year(4) --- 1901~2155; year(2) --- 00~99

    TIMESTAMP: 时间戳列显示在相同的格式为DATETIME列。换句话说,显示宽度固定为19个字符,格式是'YYYY-MM-DD HH:MM:SS'。

    TIMESTAMP数据类型提供自动初始化和更新。但是只能有一列默认值和更新是 指定为CURRENT_TIMESTAMP

    1、自动初始化和自动更新 eg : ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

    2、只有自动初始化; eg:ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP

    3、只有自动更新; eg:ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP

    4、都没有; eg:ts TIMESTAMP DEFAULT 0

    字符串类型:

    字符串类型是CHAR、VARCHAR、BINARY【二进制数据类型】、BLOB、TEXT【文本类型】、ENUM【枚举类型】和SET【数据集合】。

    char和varchar的区别:存储长度的区别在于最大长度和是否保留空格;

    char会保留空格,varchar不会保留空格

    char为 0~ 255; varchar为 0 ~ 65535

    ENUM: 枚举是一个字符串对象从中明确列举了在创建表时列规范的允许值的列表中选择一个值。【当插入值不能和列表的值惊醒匹配时,默认是最大索引值】

     , ,
    numbers ENUM('0','1','2')
    mysql> INSERT INTO t (numbers) VALUES(2),('2'),('3');mysql> SELECT * FROM t;+---------+| numbers |+---------+| 1 || 2 || 2 |+---------+

    SET: 集是一个对象,该对象可以有零个或多个值的字符串,其中每个必须从列表中选择允许创建表时指定的值。【当插入值不能和列表的值经行匹配时,MYSQL会忽略列表中不存在的值】

    1 CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));2 3 INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

    从定义中可以看出 ENUM和SET的区别在于值是定义时指定的值中的一个还是多个。还有就是在插入值在列表中不存在的表现不一样。

    更多相关免费学习推荐:mysql教程(视频)

    数据库中所有的数据类型?

    SQL 用于各种数据库的数据类型:

    一、MySQL 数据类型:

    在 MySQL 中,有三种主要的类型:Text(文本)、Number(数字)和 Date/Time(日期/时间)类型。

    1、Text 类型。

    2、Number 类型。这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。

    3、Date 类型。

    即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。

    TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。

    二、SQL Server 数据类型:

    1、String 类型。

    2、Number 类型。

    3、Date 类型。

    4、其他数据类型。

    扩展资料:

    Microsoft Access的数据类型:

    参考资料:

    百度百科--SQL数据类型

    mysql类型

    MySQL常见数据类型:[数值]、[日期时间]和[字符串]类型。
    一、数值
    1、整型
    MySQL数据类型含义(有符号)tinyint1个字节
    范围(-128~127)smallint2个字节
    范围(-32768~32767)mediumint3个字节
    范围(-8388608~8388607)int4个字节
    范围(-2147483648~2147483647)bigint8个字节
    范围(+-9.22*10的18次方)
    在int类型里,都是用来存储整形数据,可以根据实际需要选取数据类型。
    取值范围如果加了unsigned,则最大数值范围翻倍,比如 tinyint unsigned的取值范围为(0~256)。
    int(m)里的m是表示SELECT查询结果集中的显示宽度,无实际意义,不影响实际的取值范围
    2、浮点型
    MySQL数据类型含义float(m,d)单精度浮点型
    8位精度(4字节)
    m总个数,d小数位double(m,d)双精度浮点型
    16位精度(8字节)
    m总个数,d小数位decimal(m,d)定点数
    总个数m<38, d小数位
    设一个字段定义为float(5,2),如果插入一个数123.45678,实际数据库里存的是123.46(四舍五入)

    mysql类型

    MySQL常见数据类型:[数值]、[日期时间]和[字符串]类型。
    一、数值
    1、整型
    MySQL数据类型含义(有符号)tinyint1个字节
    范围(-128~127)smallint2个字节
    范围(-32768~32767)mediumint3个字节
    范围(-8388608~8388607)int4个字节
    范围(-2147483648~2147483647)bigint8个字节
    范围(+-9.22*10的18次方)
    在int类型里,都是用来存储整形数据,可以根据实际需要选取数据类型。
    取值范围如果加了unsigned,则最大数值范围翻倍,比如 tinyint unsigned的取值范围为(0~256)。
    int(m)里的m是表示SELECT查询结果集中的显示宽度,无实际意义,不影响实际的取值范围
    2、浮点型
    MySQL数据类型含义float(m,d)单精度浮点型
    8位精度(4字节)
    m总个数,d小数位double(m,d)双精度浮点型
    16位精度(8字节)
    m总个数,d小数位decimal(m,d)定点数
    总个数m<38, d小数位
    设一个字段定义为float(5,2),如果插入一个数123.45678,实际数据库里存的是123.46(四舍五入)

    MYSQL中如何选择合适的数据类型

    MySQL 数据类型细分下来,大概有以下几类:

      数值,典型代表为 tinyint,int,bigint

      浮点/定点,典型代表为 float,double,decimal 以及相关的同义词

      字符串,典型代表为 char,varchar

      时间日期,典型代表为 date,datetime,time,timestamp

      二进制,典型代表为 binary,varbinary

      位类型

      枚举类型

      集合类型

      大对象,比如 text,blob

      json 文档类型

      一、数值类型(不是数据类型,别看错了)如果用来存放整数,根据范围的不同,选择不同的类型。


      以上是几个整数选型的例子。整数的应用范围最广泛,可以用来存储数字,也可以用来存储时间戳,还可以用来存储其他类型转换为数字后的编码,如 IPv4 等。示例 1用 int32 来存放 IPv4 地址,比单纯用字符串节省空间。表 x1,字段 ipaddr,利用函数 inet_aton,检索的话用函数 inet_ntoa。

      查看磁盘空间占用,t3 占用最大,t1 占用最小。所以说如果整数存储范围有固定上限,并且未来也没有必要扩容的话,建议选择最小的类型,当然了对其他类型也适用。root@ytt-pc:/var/lib/mysql/3305/ytt# ls -sihl总用量 3.0G3541825 861M -rw-r----- 1 mysql mysql 860M 12月 10 11:36 t1.ibd3541820 989M -rw-r----- 1 mysql mysql 988M 12月 10 11:38 t2.ibd3541823 1.2G -rw-r----- 1 mysql mysql 1.2G 12月 10 11:39 t3.ibd

      二、浮点数 / 定点数先说 浮点数,float 和 double 都代表浮点数,区别简单记就是 float 默认占 4 Byte。float(p) 中的 p 代表整数位最小精度。如果 p > 24 则直接转换为 double,占 8 Byte。p 最大值为 53,但最大值存在计算不精确的问题。再说 定点数,包括 decimal 以及同义词 numeric,定点数的整数位和小数位分别存储,有效精度最大不能超过 65。所以区别于 float 的在于精确存储,必须需要精确存储或者精确计算的最好定义为 decimal 即可。示例 3创建一张表 y1,分别给字段 f1,f2,f3 不同的类型。mysql-(ytt/3305)->create table y1(f1 float,f2 double,f3 decimal(10,2));Query OK, 0 rows affected (0.03 sec)


      三、字符类型字符类型和整形一样,用途也很广。用来存储字符、字符串、MySQL 所有未知的类型。可以简单说是万能类型!


      char(10) 代表最大支持 10 个字符存储,varhar(10) 虽然和 char(10) 可存储的字符数一样多,不同的是 varchar 类型存储的是实际大小,char 存储的理论固定大小。具体的字节数和字符集相关。示例 4例如下面表 t4 ,两个字段 c1,c2,分别为 char 和 varchar。mysql-(ytt/3305)->create table t4 (c1 char(20),c2 varchar(20));Query OK, 0 rows affected (0.02 sec)


      所以在 char 和 varchar 选型上,要注意看是否合适的取值范围。比如固定长度的值,肯定要选择 char;不确定的值,则选择 varchar。


      四、日期类型日期类型包含了 date,time,datetime,timestamp,以及 year。year 占 1 Byte,date 占 3 Byte。 


      time,timestamp,datetime 在不包含小数位时分别占用 3 Byte,4 Byte,8 Byte;小数位部分另外计算磁盘占用,见下面表格。

      注意:timestamp 代表的时间戳是一个 int32 存储的整数,取值范围为 '1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999';datetime 取值范围为 '1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999'。 

      综上所述,日期这块类型的选择遵循以下原则:

      1. 如果时间有可能超过时间戳范围,优先选择 datetime。2. 如果需要单独获取年份值,比如按照年来分区,按照年来检索等,最好在表中添加一个 year 类型来参与。3. 如果需要单独获取日期或者时间,最好是单独存放,而不是简单的用 datetime 或者 timestamp。后面检索时,再加函数过滤,以免后期增加 SQL 编写带来额外消耗。

      4. 如果有保存毫秒类似的需求,最好是用时间类型自己的特性,不要直接用字符类型来代替。MySQL 内部的类型转换对资源额外的消耗也是需要考虑的。

      示例 5

      建立表 t5,对这些可能需要的字段全部分离开,这样以后写 SQL 语句的时候就很容易了。

      当然了,这种情形占用额外的磁盘空间。如果想在易用性与空间占用量大这两点来折中,可以用 MySQL 的虚拟列来实时计算。比如假设 c5 字段不存在,想要得到 c5 的结果。mysql-(ytt/3305)->alter table t5 drop c5, add c5 year generated always as (year(c1)) virtual;Query OK, 1 row affected (2.46 sec)Records: 1  Duplicates: 0  Warnings: 0



      五、二进制类型

      binary 和 varbinary 对应了 char 和 varchar 的二进制存储,相关的特性都一样。不同的有以下几点:

      binary(10)/varbinary(10) 代表的不是字符个数,而是字节数。

      行结束符不一样。char 的行结束符是 ,binary 的行结束符是 0x00。

      由于是二进制存储,所以字符编码以及排序规则这类就直接无效了。

      示例 6

      来看这个 binary 存取的简单示例,还是之前的变量 @a。

      切记!这里要提前计算好 @a 占用的字节数,以防存储溢出。


      六、位类型

      bit 为 MySQL 里存储比特位的类型,最大支持 64 比特位, 直接以二进制方式存储,一般用来存储状态类的信息。比如,性别,真假等。具有以下特性:

      1. 对于 bit(8) 如果单纯存放 1 位,左边以 0 填充 00000001。2. 查询时可以直接十进制来过滤数据。3. 如果此字段加上索引,MySQL 不会自己做类型转换,只能用二进制来过滤。

      示例 7

      创建表 c1, 字段性别定义一个比特位。mysql-(ytt/3305)->create table c1(gender bit(1));Query OK, 0 rows affected (0.02 sec)



      mysql-(ytt/3305)->select cast(gender as unsigned)  'f1' from c1;+------+| f1   |+------+|    0 ||    1 |+------+2 rows in set (0.00 sec)


      过滤数据也一样,二进制或者直接十进制都行。mysql-(ytt/3305)->select conv(gender,16,10) as gender    -> from c1 where gender = b'1'; +--------+| gender |+--------+| 1      |+--------+1 row in set (0.00 sec)    mysql-(ytt/3305)->select conv(gender,16,10) as gender     -> from c1 where gender = '1';+--------+| gender |+--------+| 1      |+--------+1 row in set (0.00 sec)


      其实这样的场景,也可以定义为 char(0),这也是类似于 bit 非常优化的一种用法。

      mysql-(ytt/3305)->create table c2(gender char(0));Query OK, 0 rows affected (0.03 sec)


      那现在我给表 c1 简单的造点测试数据。

      mysql-(ytt/3305)->select count(*) from c1;+----------+| count(*) |+----------+| 33554432 |+----------+1 row in set (1.37 sec)


      把 c1 的数据全部插入 c2。

      mysql-(ytt/3305)->insert into c2 select if(gender = 0,'',null) from c1;Query OK, 33554432 rows affected (2 min 18.80 sec)Records: 33554432  Duplicates: 0  Warnings: 0


      两张表的磁盘占用差不多。root@ytt-pc:/var/lib/mysql/3305/ytt# ls -sihl总用量 1.9G4085684 933M -rw-r----- 1 mysql mysql 932M 12月 11 10:16 c1.ibd4082686 917M -rw-r----- 1 mysql mysql 916M 12月 11 10:22 c2.ibd


      检索方式稍微有些不同,不过效率也差不多。所以说,字符类型不愧为万能类型。


      七、枚举类型

      枚举类型,也即 enum。适合提前规划好了所有已经知道的值,且未来最好不要加新值的情形。枚举类型有以下特性:

      1. 最大占用 2 Byte。2. 最大支持 65535 个不同元素。3. MySQL 后台存储以下标的方式,也就是 tinyint 或者 smallint 的方式,下标从 1 开始。4. 排序时按照下标排序,而不是按照里面元素的数据类型。所以这点要格外注意。

      示例 8

      创建表 t7。mysql-(ytt/3305)->create table t7(c1 enum('mysql','oracle','dble','postgresql','mongodb','redis','db2','sql server'));Query OK, 0 rows affected (0.03 sec)



      八、集合类型

      集合类型 SET 和枚举类似,也是得提前知道有多少个元素。SET 有以下特点:

      1. 最大占用 8 Byte,int64。2. 内部以二进制位的方式存储,对应的下标如果以十进制来看,就分别为 1,2,4,8,...,pow(2,63)。3. 最大支持 64 个不同的元素,重复元素的插入,取出来直接去重。4. 元素之间可以组合插入,比如下标为 1 和 2 的可以一起插入,直接插入 3 即可。

      示例 9

      定义表 c7 字段 c1 为 set 类型,包含了 8 个值,也就是下表最大为 pow(2,7)。

      mysql-(ytt/3305)->create table c7(c1 set('mysql','oracle','dble','postgresql','mongodb','redis','db2','sql server'));Query OK, 0 rows affected (0.02 sec)


      插入 1 到 128 的所有组合。

      mysql-(ytt/3305)->INSERT INTO c7WITH RECURSIVE ytt_number (cnt) AS (        SELECT 1 AS cnt        UNION ALL        SELECT cnt + 1        FROM ytt_number        WHERE cnt < pow(2, 7)    )SELECT *FROM ytt_number;Query OK, 128 rows affected (0.01 sec)Records: 128  Duplicates: 0  Warnings: 0

      九、数据类型在存储函数中的用法

      函数里除了显式声明的变量外,默认 session 变量的数据类型很弱,随着给定值的不同随意转换。

      示例 10

      定义一个函数,返回两个给定参数的乘积。定义里有两个变量,一个是 v_tmp 显式定义为 int64,另外一个 @vresult 随着给定值的类型随意变换类型。


      简单调用下。

      mysql-(ytt/3305)->select ytt_sample_data_type(1111,222) 'result';+--------------------------+| result                   |+--------------------------+| The result is: '246642'. |+--------------------------+1 row in set (0.00 sec)


      总结

      本篇把 MySQL 基本的数据类型做了简单的介绍,并且用了一些容易理解的示例来梳理这些类型。我们在实际场景中,建议选择适合最合适的类型,不建议所有数据类型简单的最大化原则。比如能用 varchar(100),不用 varchar(1000)。

    MYSQL中如何选择合适的数据类型

    MySQL 数据类型细分下来,大概有以下几类:

      数值,典型代表为 tinyint,int,bigint

      浮点/定点,典型代表为 float,double,decimal 以及相关的同义词

      字符串,典型代表为 char,varchar

      时间日期,典型代表为 date,datetime,time,timestamp

      二进制,典型代表为 binary,varbinary

      位类型

      枚举类型

      集合类型

      大对象,比如 text,blob

      json 文档类型

      一、数值类型(不是数据类型,别看错了)如果用来存放整数,根据范围的不同,选择不同的类型。


      以上是几个整数选型的例子。整数的应用范围最广泛,可以用来存储数字,也可以用来存储时间戳,还可以用来存储其他类型转换为数字后的编码,如 IPv4 等。示例 1用 int32 来存放 IPv4 地址,比单纯用字符串节省空间。表 x1,字段 ipaddr,利用函数 inet_aton,检索的话用函数 inet_ntoa。

      查看磁盘空间占用,t3 占用最大,t1 占用最小。所以说如果整数存储范围有固定上限,并且未来也没有必要扩容的话,建议选择最小的类型,当然了对其他类型也适用。root@ytt-pc:/var/lib/mysql/3305/ytt# ls -sihl总用量 3.0G3541825 861M -rw-r----- 1 mysql mysql 860M 12月 10 11:36 t1.ibd3541820 989M -rw-r----- 1 mysql mysql 988M 12月 10 11:38 t2.ibd3541823 1.2G -rw-r----- 1 mysql mysql 1.2G 12月 10 11:39 t3.ibd

      二、浮点数 / 定点数先说 浮点数,float 和 double 都代表浮点数,区别简单记就是 float 默认占 4 Byte。float(p) 中的 p 代表整数位最小精度。如果 p > 24 则直接转换为 double,占 8 Byte。p 最大值为 53,但最大值存在计算不精确的问题。再说 定点数,包括 decimal 以及同义词 numeric,定点数的整数位和小数位分别存储,有效精度最大不能超过 65。所以区别于 float 的在于精确存储,必须需要精确存储或者精确计算的最好定义为 decimal 即可。示例 3创建一张表 y1,分别给字段 f1,f2,f3 不同的类型。mysql-(ytt/3305)->create table y1(f1 float,f2 double,f3 decimal(10,2));Query OK, 0 rows affected (0.03 sec)


      三、字符类型字符类型和整形一样,用途也很广。用来存储字符、字符串、MySQL 所有未知的类型。可以简单说是万能类型!


      char(10) 代表最大支持 10 个字符存储,varhar(10) 虽然和 char(10) 可存储的字符数一样多,不同的是 varchar 类型存储的是实际大小,char 存储的理论固定大小。具体的字节数和字符集相关。示例 4例如下面表 t4 ,两个字段 c1,c2,分别为 char 和 varchar。mysql-(ytt/3305)->create table t4 (c1 char(20),c2 varchar(20));Query OK, 0 rows affected (0.02 sec)


      所以在 char 和 varchar 选型上,要注意看是否合适的取值范围。比如固定长度的值,肯定要选择 char;不确定的值,则选择 varchar。


      四、日期类型日期类型包含了 date,time,datetime,timestamp,以及 year。year 占 1 Byte,date 占 3 Byte。 


      time,timestamp,datetime 在不包含小数位时分别占用 3 Byte,4 Byte,8 Byte;小数位部分另外计算磁盘占用,见下面表格。

      注意:timestamp 代表的时间戳是一个 int32 存储的整数,取值范围为 '1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999';datetime 取值范围为 '1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999'。 

      综上所述,日期这块类型的选择遵循以下原则:

      1. 如果时间有可能超过时间戳范围,优先选择 datetime。2. 如果需要单独获取年份值,比如按照年来分区,按照年来检索等,最好在表中添加一个 year 类型来参与。3. 如果需要单独获取日期或者时间,最好是单独存放,而不是简单的用 datetime 或者 timestamp。后面检索时,再加函数过滤,以免后期增加 SQL 编写带来额外消耗。

      4. 如果有保存毫秒类似的需求,最好是用时间类型自己的特性,不要直接用字符类型来代替。MySQL 内部的类型转换对资源额外的消耗也是需要考虑的。

      示例 5

      建立表 t5,对这些可能需要的字段全部分离开,这样以后写 SQL 语句的时候就很容易了。

      当然了,这种情形占用额外的磁盘空间。如果想在易用性与空间占用量大这两点来折中,可以用 MySQL 的虚拟列来实时计算。比如假设 c5 字段不存在,想要得到 c5 的结果。mysql-(ytt/3305)->alter table t5 drop c5, add c5 year generated always as (year(c1)) virtual;Query OK, 1 row affected (2.46 sec)Records: 1  Duplicates: 0  Warnings: 0



      五、二进制类型

      binary 和 varbinary 对应了 char 和 varchar 的二进制存储,相关的特性都一样。不同的有以下几点:

      binary(10)/varbinary(10) 代表的不是字符个数,而是字节数。

      行结束符不一样。char 的行结束符是 ,binary 的行结束符是 0x00。

      由于是二进制存储,所以字符编码以及排序规则这类就直接无效了。

      示例 6

      来看这个 binary 存取的简单示例,还是之前的变量 @a。

      切记!这里要提前计算好 @a 占用的字节数,以防存储溢出。


      六、位类型

      bit 为 MySQL 里存储比特位的类型,最大支持 64 比特位, 直接以二进制方式存储,一般用来存储状态类的信息。比如,性别,真假等。具有以下特性:

      1. 对于 bit(8) 如果单纯存放 1 位,左边以 0 填充 00000001。2. 查询时可以直接十进制来过滤数据。3. 如果此字段加上索引,MySQL 不会自己做类型转换,只能用二进制来过滤。

      示例 7

      创建表 c1, 字段性别定义一个比特位。mysql-(ytt/3305)->create table c1(gender bit(1));Query OK, 0 rows affected (0.02 sec)



      mysql-(ytt/3305)->select cast(gender as unsigned)  'f1' from c1;+------+| f1   |+------+|    0 ||    1 |+------+2 rows in set (0.00 sec)


      过滤数据也一样,二进制或者直接十进制都行。mysql-(ytt/3305)->select conv(gender,16,10) as gender    -> from c1 where gender = b'1'; +--------+| gender |+--------+| 1      |+--------+1 row in set (0.00 sec)    mysql-(ytt/3305)->select conv(gender,16,10) as gender     -> from c1 where gender = '1';+--------+| gender |+--------+| 1      |+--------+1 row in set (0.00 sec)


      其实这样的场景,也可以定义为 char(0),这也是类似于 bit 非常优化的一种用法。

      mysql-(ytt/3305)->create table c2(gender char(0));Query OK, 0 rows affected (0.03 sec)


      那现在我给表 c1 简单的造点测试数据。

      mysql-(ytt/3305)->select count(*) from c1;+----------+| count(*) |+----------+| 33554432 |+----------+1 row in set (1.37 sec)


      把 c1 的数据全部插入 c2。

      mysql-(ytt/3305)->insert into c2 select if(gender = 0,'',null) from c1;Query OK, 33554432 rows affected (2 min 18.80 sec)Records: 33554432  Duplicates: 0  Warnings: 0


      两张表的磁盘占用差不多。root@ytt-pc:/var/lib/mysql/3305/ytt# ls -sihl总用量 1.9G4085684 933M -rw-r----- 1 mysql mysql 932M 12月 11 10:16 c1.ibd4082686 917M -rw-r----- 1 mysql mysql 916M 12月 11 10:22 c2.ibd


      检索方式稍微有些不同,不过效率也差不多。所以说,字符类型不愧为万能类型。


      七、枚举类型

      枚举类型,也即 enum。适合提前规划好了所有已经知道的值,且未来最好不要加新值的情形。枚举类型有以下特性:

      1. 最大占用 2 Byte。2. 最大支持 65535 个不同元素。3. MySQL 后台存储以下标的方式,也就是 tinyint 或者 smallint 的方式,下标从 1 开始。4. 排序时按照下标排序,而不是按照里面元素的数据类型。所以这点要格外注意。

      示例 8

      创建表 t7。mysql-(ytt/3305)->create table t7(c1 enum('mysql','oracle','dble','postgresql','mongodb','redis','db2','sql server'));Query OK, 0 rows affected (0.03 sec)



      八、集合类型

      集合类型 SET 和枚举类似,也是得提前知道有多少个元素。SET 有以下特点:

      1. 最大占用 8 Byte,int64。2. 内部以二进制位的方式存储,对应的下标如果以十进制来看,就分别为 1,2,4,8,...,pow(2,63)。3. 最大支持 64 个不同的元素,重复元素的插入,取出来直接去重。4. 元素之间可以组合插入,比如下标为 1 和 2 的可以一起插入,直接插入 3 即可。

      示例 9

      定义表 c7 字段 c1 为 set 类型,包含了 8 个值,也就是下表最大为 pow(2,7)。

      mysql-(ytt/3305)->create table c7(c1 set('mysql','oracle','dble','postgresql','mongodb','redis','db2','sql server'));Query OK, 0 rows affected (0.02 sec)


      插入 1 到 128 的所有组合。

      mysql-(ytt/3305)->INSERT INTO c7WITH RECURSIVE ytt_number (cnt) AS (        SELECT 1 AS cnt        UNION ALL        SELECT cnt + 1        FROM ytt_number        WHERE cnt < pow(2, 7)    )SELECT *FROM ytt_number;Query OK, 128 rows affected (0.01 sec)Records: 128  Duplicates: 0  Warnings: 0

      九、数据类型在存储函数中的用法

      函数里除了显式声明的变量外,默认 session 变量的数据类型很弱,随着给定值的不同随意转换。

      示例 10

      定义一个函数,返回两个给定参数的乘积。定义里有两个变量,一个是 v_tmp 显式定义为 int64,另外一个 @vresult 随着给定值的类型随意变换类型。


      简单调用下。

      mysql-(ytt/3305)->select ytt_sample_data_type(1111,222) 'result';+--------------------------+| result                   |+--------------------------+| The result is: '246642'. |+--------------------------+1 row in set (0.00 sec)


      总结

      本篇把 MySQL 基本的数据类型做了简单的介绍,并且用了一些容易理解的示例来梳理这些类型。我们在实际场景中,建议选择适合最合适的类型,不建议所有数据类型简单的最大化原则。比如能用 varchar(100),不用 varchar(1000)。

    mysql数据库中有几种数据类型

    MySQL数据类型之一字符型

    VARCHAR VS CHAR

    VARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要。他们都是用来储存字符串长度小于255的字符。

    假如你向一个长度为四十个字符的VARCHAR型字段中输入数据Bill Gates。当你以后从这个字段中取出此数据时,你取出的数据其长度为十个字符——字符串Bill Gates的长度。 现在假如你把字符串输入一个长度为四十个字符的CHAR型字段中,那么当你取出数据时,所取出的数据长度将是四十个字符。字符串的后面会被附加多余的空格。

    当你建立自己的站点时,你会发现使用VARCHAR型字段要比CHAR型字段方便的多。使用VARCHAR型字段时,你不需要为剪掉你数据中多余的空格而操心。

    VARCHAR型字段的另一个突出的好处是它可以比CHAR型字段占用更少的内存和硬盘空间。当你的数据库很大时,这种内存和磁盘空间的节省会变得非常重要

    MySQL数据类型之二文本型

    TEXT

    使用文本型数据,你可以存放超过二十亿个字符的字符串。当你需要存储大串的字符时,应该使用文本型数据。

    注意文本型数据没有长度,而上一节中所讲的字符型数据是有长度的。一个文本型字段中的数据通常要么为空,要么很大。

    当你从HTML form的多行文本编辑框(TEXTAREA)中收集数据时,你应该把收集的信息存储于文本型字段中。但是,无论何时,只要你能避免使用文本型字段,你就应该不适用它。文本型字段既大且慢,滥用文本型字段会使服务器速度变慢。文本型字段还会吃掉大量的磁盘空间。

    一旦你向文本型字段中输入了任何数据(甚至是空值),就会有2K的空间被自动分配给该数据。除非删除该记录,否则你无法收回这部分存储空间。

    MySQL数据类型之三数值型

    SQL支持许多种不同的数值型数据。你可以存储整数 INT 、小数 NUMERIC、和钱数 MONEY。

    INT VS SMALLINT VS TINYINT

    他们的区别只是字符长度:

    INT型数据的表数范围是从-2,147,483,647到2,147,483,647的整数

    SMALLINT 型数据可以存储从-32768到32768的整数

    TINYINT 型的字段只能存储从0到255的整数,不能用来储存负数

    通常,为了节省空间,应该尽可能的使用最小的整型数据。一个TINYINT型数据只占用一个字节;一个INT型数据占用四个字节。这看起来似乎差别不大,但是在比较大的表中,字节数的增长是很快的。另一方面,一旦你已经创建了一个字段,要修改它是很困难的。因此,为安全起见,你应该预测以下,一个字段所需要存储的数值最大有可能是多大,然后选择适当的数据类型。

    MUNERIC

    为了能对字段所存放的数据有更多的控制,你可以使用NUMERIC型数据来同时表示一个数的整数部分和小数部分。NUMERIC型数据使你能表示非常大的数——比INT型数据要大得多。一个NUMERIC型字段可以存储从-1038到1038范围内的数。NUMERIC型数据还使你能表示有小数部分的数。例如,你可以在NUMERIC型字段中存储小数3.14。

    当定义一个NUMERIC型字段时,你需要同时指定整数部分的大小和小数部分的大小。如:MUNERIC(23,0)

    一个 NUMERIC型数据的整数部分最大只能有28位,小数部分的位数必须小于或等于整数部分的位数,小数部分可以是零。

    MONEY VS SMALLMONEY

    你可以使用 INT型或NUMERIC型数据来存储钱数。但是,专门有另外两种数据类型用于此目的。如果你希望你的网点能挣很多钱,你可以使用MONEY型数据。如果你的野心不大,你可以使用SMALLMONEY型数据。MONEY型数据可以存储从-922,337,203,685,477.5808到922,337,203,685,477.5807的钱数。如果你需要存储比这还大的金额,你可以使用NUMERIC型数据。

    SMALLMONEY型数据只能存储从-214,748.3648到214,748.3647 的钱数。同样,如果可以的话,你应该用SMALLMONEY型来代替MONEY型数据,以节省空间。

    MySQL数据类型之四逻辑型

    BIT

    如果你使用复选框( CHECKBOX)从网页中搜集信息,你可以把此信息存储在BIT型字段中。BIT型字段只能取两个值:0或1。

    当心,在你创建好一个表之后,你不能向表中添加 BIT型字段。如果你打算在一个表中包含BIT型字段,你必须在创建表时完成。

    MySQL数据类型之五日期型

    DATETIME VS SMALLDATETIME

    一个 DATETIME型的字段可以存储的日期范围是从1753年1月1日第一毫秒到9999年12月31日最后一毫秒。

    如果你不需要覆盖这么大范围的日期和时间,你可以使用SMALLDATETIME型数据。它与DATETIME型数据同样使用,只不过它能表示的日期和时间范围比DATETIME型数据小,而且不如DATETIME型数据精确。一个SMALLDATETIME型的字段能够存储从1900年1月1日到2079年6月6日的日期,它只能精确到秒。

    DATETIME型字段在你输入日期和时间之前并不包含实际的数据,认识这一点是重要的。

    mysql中数据类型char和varchar的区别

    char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:
    char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).
    在MySQL中用来判断是否需要进行对据列类型转换的规则
    1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的.
    2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.
    3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.
    例外:长度小于4个字符的char数据列不会被转换为varchar类型

    mysql中数据类型char和varchar的区别

    char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:
    char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).
    在MySQL中用来判断是否需要进行对据列类型转换的规则
    1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的.
    2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.
    3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.
    例外:长度小于4个字符的char数据列不会被转换为varchar类型

    mysql有哪些数据类型长度分别是多少

    精确数字
    整数
    bigint

    从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。

    int

    从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。

    smallint

    从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整数数据。

    tinyint

    从 0 到 255 的整数数据。

    bit
    bit

    1 或 0 的整数数据。

    decimal 和 numeric
    decimal

    从 -10^38 +1 到 10^38 –1 的固定精度和小数位的数字数据。

    numeric

    功能上等同于 decimal。

    money 和 smallmoney
    money

    货币数据值介于 -2^63 (-922,337,203,685,477.5808) 与 2^63 - 1 (+922,337,203,685,477.5807) 之间,精确到货币单位的千分之十。

    smallmoney

    货币数据值介于 -214,748.3648 与 +214,748.3647 之间,精确到货币单位的千分之十。

    近似数字
    float

    从 -1.79E + 308 到 1.79E + 308 的浮点精度数字。

    real

    从 -3.40E + 38 到 3.40E + 38 的浮点精度数字。

    datetime 和 smalldatetime
    datetime

    从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间数据,精确到百分之三秒(或 3.33 毫秒)。

    smalldatetime

    从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间数据,精确到分钟。

    字符串
    char

    固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。

    varchar

    可变长度的非 Unicode 数据,最长为 8,000 个字符。

    text

    可变长度的非 Unicode 数据,最大长度为 2^31 - 1 (2,147,483,647) 个字符。

    Unicode 字符串
    nchar

    固定长度的 Unicode 数据,最大长度为 4,000 个字符。

    nvarchar

    可变长度 Unicode 数据,其最大长度为 4,000 字符。sysname 是系统提供用户定义的数据类型,在功能上等同于 nvarchar(128),用于引用数据库对象名。

    ntext

    可变长度 Unicode 数据,其最大长度为 2^30 - 1 (1,073,741,823) 个字符。

    二进制字符串
    binary

    固定长度的二进制数据,其最大长度为 8,000 个字节。

    varbinary

    可变长度的二进制数据,其最大长度为 8,000 个字节。

    image

    可变长度的二进制数据,其最大长度为 2^31 - 1 (2,147,483,647) 个字节。

    其它数据类型
    cursor

    游标的引用。

    sql_variant

    一种存储 SQL Server 支持的各种数据类型(text、ntext、timestamp 和 sql_variant 除外)值的数据类型。

    table

    一种特殊的数据类型,存储供以后处理的结果集。

    timestamp

    数据库范围的唯一数字,每次更新行时也进行更新。

    uniqueidentifier

    全局唯一标识符 (GUID)。

    mysql有哪些数据类型长度分别是多少

    精确数字
    整数
    bigint

    从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。

    int

    从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。

    smallint

    从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整数数据。

    tinyint

    从 0 到 255 的整数数据。

    bit
    bit

    1 或 0 的整数数据。

    decimal 和 numeric
    decimal

    从 -10^38 +1 到 10^38 –1 的固定精度和小数位的数字数据。

    numeric

    功能上等同于 decimal。

    money 和 smallmoney
    money

    货币数据值介于 -2^63 (-922,337,203,685,477.5808) 与 2^63 - 1 (+922,337,203,685,477.5807) 之间,精确到货币单位的千分之十。

    smallmoney

    货币数据值介于 -214,748.3648 与 +214,748.3647 之间,精确到货币单位的千分之十。

    近似数字
    float

    从 -1.79E + 308 到 1.79E + 308 的浮点精度数字。

    real

    从 -3.40E + 38 到 3.40E + 38 的浮点精度数字。

    datetime 和 smalldatetime
    datetime

    从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间数据,精确到百分之三秒(或 3.33 毫秒)。

    smalldatetime

    从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间数据,精确到分钟。

    字符串
    char

    固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。

    varchar

    可变长度的非 Unicode 数据,最长为 8,000 个字符。

    text

    可变长度的非 Unicode 数据,最大长度为 2^31 - 1 (2,147,483,647) 个字符。

    Unicode 字符串
    nchar

    固定长度的 Unicode 数据,最大长度为 4,000 个字符。

    nvarchar

    可变长度 Unicode 数据,其最大长度为 4,000 字符。sysname 是系统提供用户定义的数据类型,在功能上等同于 nvarchar(128),用于引用数据库对象名。

    ntext

    可变长度 Unicode 数据,其最大长度为 2^30 - 1 (1,073,741,823) 个字符。

    二进制字符串
    binary

    固定长度的二进制数据,其最大长度为 8,000 个字节。

    varbinary

    可变长度的二进制数据,其最大长度为 8,000 个字节。

    image

    可变长度的二进制数据,其最大长度为 2^31 - 1 (2,147,483,647) 个字节。

    其它数据类型
    cursor

    游标的引用。

    sql_variant

    一种存储 SQL Server 支持的各种数据类型(text、ntext、timestamp 和 sql_variant 除外)值的数据类型。

    table

    一种特殊的数据类型,存储供以后处理的结果集。

    timestamp

    数据库范围的唯一数字,每次更新行时也进行更新。

    uniqueidentifier

    全局唯一标识符 (GUID)。

    mysql 中 整型数据类型(M)里M是什么作用

    整型数据列类型

    MySQL有五种整型数据列类型,即TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT。它们之间的区别是取值范围不同,存储空间也各不相同。
    在整型数据列后加上UNSIGNED属性可以禁止负数,取值从0开始。

    声明整型数据列时,我们可以为它指定个显示宽度M(1~255),如INT(5),指定显示宽度为5个字符,如果没有给它指定显示宽度,MySQL会为它指定一个默认值。显示宽度只用于显示,并不能*取值范围和占用空间,如:INT(3)会占用4个字节的存储空间,并且允许的最大值也不会是999,而是INT整型所允许的最大值。

    参考资料:mysql中数据类型详解

    mysql 中 整型数据类型(M)里M是什么作用

    整型数据列类型

    MySQL有五种整型数据列类型,即TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT。它们之间的区别是取值范围不同,存储空间也各不相同。
    在整型数据列后加上UNSIGNED属性可以禁止负数,取值从0开始。

    声明整型数据列时,我们可以为它指定个显示宽度M(1~255),如INT(5),指定显示宽度为5个字符,如果没有给它指定显示宽度,MySQL会为它指定一个默认值。显示宽度只用于显示,并不能*取值范围和占用空间,如:INT(3)会占用4个字节的存储空间,并且允许的最大值也不会是999,而是INT整型所允许的最大值。

    参考资料:mysql中数据类型详解

    显示全文