通常认为:

日期 就是 年-月-日:

时间就是: 小时:分钟:秒

要严格区分"日期"和 "时间"的 说法. 日期就是日期, 时间就是时间, 两者是不同的!!

日期和时间类型

  在处理日期和时间类型的值时,MySQL 带有 5 个不同的数据类型可供选择。它们可以被分成简单的日期、时间类型,和混合日期、时间类型。

根据要求的精度,子类型在每个分类型中都可以使用, 并且 MySQL 带有 内置功能 可以把多样化的输入格式变为一个标准格式。

注意这里的 内置功能, 可以把多样化的输入格式 转变为一个标准格式, 比如下面的插入中, 日期格式字符串使用了: -, 2000/01/02, 2000|3|04 等格式, mysql都能转换为标准的 2000-01-02格式:



甚至你设置的 时间格式字符串 的分隔符 很 "过分", "很杂乱" 它都能 转换为标准格式, 但是 还是 最好的使用 标准 格式 来输入, 避免不必要的转换和 不可预测的错误:

类型 大小 (字节) 范围 格式 用途

DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值 (yyyy mm dd一个存储为一个字节, 中间的 横线并不存储??)

TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间

YEAR 1 1901/2155 YYYY 年份值

DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值 (中间还要存储2 个表示 分割的 字节符号)

TIMESTAMP 8 1970-01-01 00:00:00/2037 年某时 YYYYMMDD HHMMSS 混合日期和时间值,时间戳

DATE、TIME 和 TEAR 类型

  MySQL 用 DATE 和 TEAR 类型存储简单的日期值,使用 TIME 类型存储时间值。 表示方法: 这些类型可以描述为字符串或不带分隔符的整数序列。 如果描述为字符串,DATE 类型的值应该使用 连字号 作为分隔符分开,而 TIME 类型的值应该使用冒号作为分隔符分开。

一定要有这样的认识: 一个字符序列, 如果要表示数字, 就要从 字面上看出是一个合法的数字; 如果是字符串,就要加上引号; 否则, mysql就会当做 变量/或字段 来看. 而报错, 所以 表示 日期/时间的 值, 一定要用 字符串 , 用引号阔气来, 带 - 和 : 分隔符.

  需要注意的是,没有冒号分隔符的 TIME 类型值,将会被 MySQL 理解为持续的时间,而不是时间戳。

  MySQL 还对日期的年份中的两个数字的值,或是 SQL 语句中为 TEAR (year????) 类型输入的两个数字进行最大限度的通译。因为所有 TEAR 类型的值必须用 4 个数字存储。MySQL 试图将 2 个数字的年份转换为 4 个数字的值。把在 00-69 范围内的值转换到 2000-2069 范围内。把 70-99 范围内的值转换到 1970-1979 之内。如果 MySQL 自动转换后的值并不符合我们的需要,请输入 4 个数字表示的年份。

DATEYIME 和 TIMESTAMP 类型

   除了日期和时间数据类型,MySQL 还支持 DATEYIME 和 TIMESTAMP 这两种混合类型。它们可以把日期和时间作为单个的值进行存储。这两种类型通常用于自动存储包含当前日期和时间的时间戳,并可在需要执行大量数据库事务和需要建立一个调试和审查用途的审计跟踪的应用程序中发挥良好作用。

  如果我们对 TIMESTAMP 类型的字段没有明确赋值,或是被赋与了 null 值。MySQL 会自动使用系统当前的日期和时间来填充它。


注意, mysql中, 要获得日期/时间, 没有 单独 的date(), time()函数 , 而是 用 now () 函数, 或者 current_timestamp()函数或 内置系统/状态变量: current_timestamp. 注意timestamp变量返回的结果是一个整数值.

用来表示// 或者 设置// 返回 结果 的 日期的标准格式, 总是: 'YYYY-mm-dd' , 表示 时间的标准格式总是: 'HH:ii:ss' , 而 datetime类型的标准格式总是: "YYYY-mm-dd H:i:s"

mysql时间函数很多, 主要只记住两个函数 就好了:

一是, 从已有的日期/时间值(是字符串格式的), 提取/获取某个 年份/ 月份/ 时间等的, 函数 是: time_format, date_format('datevalue', 'format_string'), 格式字符串, 如同 C语言中的 格式字符串是一样的, 比如c语言中, %d %s %c, 这里的格式字符串包括 "%Yy%m%d %H %i%s" ...

二是, 将字符串 转换为 日期/时间类型变量: str_to_date('普通的字符串', '对应的日期/时间格式字符串, 包括一些分隔符 也要对应着写')...

str_to_date('2010-01-02', '%Y-%m-%d'); str_to_date('10/08/2000' , '%m/%d/%Y')...


关于 日期/时间 操作的一些实例:

MariaDB [test]> select * from foo where name='jac';

+----+------+------------+

| id | name | when (date类型) | // 插入now() 的时候, 会自动 截取前面的日期.

+----+------+------------+

| 17 | jac | 2017-11-11 |

+----+------+------------+

1 row in set (0.00 sec)

*由上可以看出, select 后面 总是接 "输出echo, print"的内容, 可以是 变量, 数字, 字符串 , 或字段, 所以 这里的 表示的是 "所有的 字段" 注意是 字段,不是 记录行 **


关于数据库中的 用户和权限?

  • 一个完整的用户, 应该是 用户+主机, 即 username@host, 比如, 用 select user() 的输出就是 root@localhost
MariaDB [(none)]> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
  • ::1 是ip6 的本地回环地址, 相当于127.0.0.1, 是ipv6的本地ip地址
  • localhost 是通过 "本地的" /var/lib/mysql/mysql.sock 的套接字来连接的, 而127.1 是通过 TCP/IP 网络网卡 来连接的.

为什么mysql上有那么多的 root用户?

在mysql上要标识一个用户, 要通过 用户名@host 来标识. 这么多的 root账号, 是因为他们的 host 不同:

  • localhost, 叫做 本地 主机, 注意是 本地 不是本机 , 就是说 是你就在 当前这个机器旁边, 这个机器上的. localhost也叫local, 它是不经过 网卡的, 不受网络防火墙和网卡的限制的;
  • 127.1 , 叫本机 主机, 是本机 服务器, 实际上是一个 网络地址, 是要 受 防火墙和 网卡的 限制的;
  • ::1 , 类似 于 127.1, 只不过 是ip v6, 访问 127.1, 实际上 是经过 网络网卡 的传输, 有数据包的传递, 只不过是: 本地(客户端)的数据包, 经过网卡 传输到 本机服务器.
  • 而 localhost.localdomain, 则是一个 标准的 网络域名了, 类似于 www_example_com. 是要经过TCP/IP的网卡/ 网络传输的.

    也就是说, 这四种 host都是不同的,有区别 的, 所以 这些mysql 账户 自然就是有区别的



mysql的匿名 用户?

  • 匿名用户就是 user='', 用户名为空的用户, 或者叫做 "Any" 的用户
  • 匿名用户的权限是 usage [ju:'sid3], 实际上, 就是没有任何权限 的本地用户 : grant usage on . to ''@'localhost'
  • 可以删除匿名用户( 即空用户, any用户): delete from mysql.user where user=''

mysql的数据类型- 特别是表示日期/时间的数据类型: 参考: http://www.cnblogs.com/bukudekong/archive/2011/06/27/2091590.html的更多相关文章

  1. mysql学习笔记--- 字符串函数、日期时间函数

    一.常见字符串函数: 1.CHAR_LENGTH  获取长度(字符为单位) 2.FORMAT  格式化 3.INSERT  替换的方式插入 4.INSTR  获取位置 5.LEFT/RIGHT  取左 ...

  2. Mysql基本类型(五种年日期时间类型)——mysql之二

    转自:<MySQL技术内幕:时间和日期数据类型> http://tech.it168.com/a2012/0904/1393/000001393605_all.shtml

  3. mysql 将时间戳直接转换成日期时间

    date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串 后面的 '%Y%m%d' 主要是将返回值格式化 例如: mysql>SELECT FROM ...

  4. Mysql创建、删除用户、用户管理等相关:转载http://www.cnblogs.com/fly1988happy/archive/2011/12/15/2288554.html

    MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 登录MYSQL: @>mysql -u root -p @>密码 ...

  5. SQL日期格式转换(经常用又经常忘记的东西)转载自http://www.cnblogs.com/wangyuelang0526/archive/2012/06/06/2538224.html

    Select CONVERT(varchar(100), GETDATE(), 8):14:53:14Select CONVERT(varchar(100), GETDATE(), 9): 06 6 ...

  6. mysql日期时间类型总结

    MySQL 日期类型:日期格式.所占存储空间.日期范围 比较.  日期类型        存储空间       日期格式                 日期范围  ------------ ---- ...

  7. Mysql 建表时,日期时间类型选择

    mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  D ...

  8. MySQL之日期时间类型

    mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  D ...

  9. MySQL建表时,日期时间类型选择

    MySQL(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  D ...

随机推荐

  1. 向量体系结构(2)----SIMD指令集扩展和GPU

    进行SIMD多媒体扩展的设计,源于一个很容易观察到的事实: 许多多媒体应用程序操作的数据类型比对32位处理器进行针对性优化的数据类型更窄一些. 图像三基色,都是8位.音频采样也都是8位和16位来表示. ...

  2. kali linux 基本命令(第一批)

    pwd  ,  rm    ,locate    ,cat    ,head     ,  clear    ,ls      ,cd     ,mkdir      ,touch       ,ec ...

  3. 说说html 的<!DOCTYPE>声明&标准模式与兼容模式

    我们都知道<!DOCTYPE>声明位于文档的最前面,处于<html>标签之前. <!DOCTYPE>声明不是html标签,它的作用:告知web浏览界面应该使用哪个h ...

  4. linux 远程执行命令

    命令: ssh 命令参数: -l 指定登入用户 -p 设置端口号 -f 后台运行,并推荐加上 -n 参数 -n 将标准输入重定向到 /dev/null,防止读取标准输入 -N 不执行远程命令,只做端口 ...

  5. numpy.random随机数生成

    seed 确定随机数生成器的种子 permutation 返回一个序列的随机排列或返回一个随机排列的返回 shuffle 对一个序列就地随机乱序 rand 产生均匀分布的样本值 randint 从给定 ...

  6. Axis2之wsdl2java工具

    本章主要介绍axis2的wsdl2java工具的使用. Axis2提供了一个wsdl2java命令可以根据WSDL文件自动产生调用WebService的代码.wsdl2java命令可以在<Axi ...

  7. vc709时钟信号报单端信号错误的记录

    话说,为什么我又要跑去搞fpga玩了,不是应该招个有经验的开发人员么?大概是练度不够吧…… Xilinx这个板子阿,真鸡儿贵,我这还没啥基础,慢慢试吧: 看了乱七八糟各种文档先不提,我还是决定先控制L ...

  8. php Allocator Jemalloc TCMalloc那个内存分配器比较好?

    php Allocator Jemalloc TCMalloc那个内存分配器比较好? php一键安装脚本可以选择是否安装内存优化 You have 3 options for your Memory ...

  9. 阿里巴巴json fastjson String转javaBean

    private Entity getEntity(String resp){        JSONObject jsonObj = (JSONObject) JSON.parse(resp);    ...

  10. 基于jquery、bootstrap的数据验证插件bootstrapValidator使用

    实时验证用户名是否存在,密码不能和用户名相同,两次密码需要相同,提交之后需要验证返回值: <form id="defaultForm" role="form&quo ...