mysql存储ip地址怎么设置,mysql数据库里的日期用timestamp还是datetime好
一、mysql数据库里的日期用timestamp还是datetime好
mysql数据库里的日期用timestamp还是datetime好(1)4个字节储存
(2)值以UTC格式保存
(3)时区转化,存储时对当前的时区进行转换,检索时再转换回当前的时区。
(4)TIMESTAMP值不能早于1970或晚于2037!
timestamp在数据库里实际记载的时间是国际标准时间,同一个timestamp值在不同的时区检索出来的日期时间是不一样的,因为系统会根据时区的不同进行自动时区转换,而datetime则不会进行转换时区转换,存储时是什么日期时间,检索出来的就是存入时的日期时间,它不会有变化。至于这两种日期时间类型哪种好是没有定论的,要根据实际情况和应用需求做出取舍。
请注意由于无需实施时区转换,系统处理dateime所产生的系统开销要比timestamp小。
没什么好不好的,方便省事才是王道。都用datetime你说呢,谁在乎那点存储
类型
类型存储需求格式时间范围
datetime 8个字节 yyyy-mm-dd hh-mm-ss 1000-01-01 00:00:00到9999-12-31 23:59:59 timestamp 4个字节 yyyy-mm-dd hh-mm-ss 1970-01-01 00:00:00到2037-12-31 23:59:59
timestamp类型会有时区变量的影响,跨时区使用时应注意
datetime 8个字节 yyyy-mm-dd hh-mm-ss 1000-01-01 00:00:00到9999-12-31 23:59:59
timestamp 4个字节 yyyy-mm-dd hh-mm-ss 1970-01-01 00:00:00到2037-12-31 23:59:59
timestamp类型会有时区变量的影响,跨时区使用时应注意
没什么好不好的,方便省事才是王道。都用datetime你说呢,谁在乎那点存储类型类型存储需求格式时间范围 datetime 8个字节
Mysql中经常用来存储日期的数据类型有2种:Date、Datetime.
1.Date数据类型:用来存储没有时间的日期。Mysql获取和显示这个类型的格式为“YYYY-MM-DD”。支持的时间范围为“1000-00-00”到“9999-12-31”。
2.Datetime类型:存储既有日期又有时间的数据。存储和显示的格式为“YYYY-MM-DD HH:MM:SS”。支持的时间范围是“1000-00-00 00:00:00”到“9999-12-31 23:59:59”。
TIMESTAMP列用于INSERT或UPDATE*作时记录日期和时间。如果你不分配一个值,表中的第一个TIMESTAMP列自动设置为近*作的日期和时间。也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间。
TIMESTAMP值返回后显示为'YYYY-MM-DDHH:MM:SS'格式的字符串,显示宽度固定为19个字符。如果想要获得数字值,应在TIMESTAMP列添加+0。
注释:MySQL4.1以前使用的TIMESTAMP格式在MySQL5.1中不支持;关于旧格式的信息参见MySQL4.1参考手册。
datetime
1.占用8个字节
2.允许为空值,可以自定义值,系统不会自动修改其值。
3.实际格式储存(Just stores what you have stored and retrieves the same thing which you have stored.)
4.与时区无关(It has nothing to deal with the TIMEZONE and Conversion.)
5.不可以设定默认值,所以在不允许为空值的情况下,必须手动指定datetime字段的值才可以成功插入数据。
6.可以在指定datetime字段的值的时候使用now()变量来自动插入系统的当前时间。
结论:datetime类型适合用来记录数据的原始的创建时间,因为无论你怎么更改记录中其他字段的值,datetime字段的值都不会改变,除非你手动更改它。
timestamp
1.占用4个字节
2.允许为空值,但是不可以自定义值,所以为空值时没有任何意义。
3. TIMESTAMP值不能早于1970或晚于2037。这说明一个日期,例如'1968-01-01',虽然对于DATETIME或DATE值是有效的,但对于TIMESTAMP值却无效,如果分配给这样一个对象将被转换为0。
4.值以UTC格式保存( it stores the number of milliseconds)
5.时区转化,存储时对当前的时区进行转换,检索时再转换回当前的时区。
6.默认值为CURRENT_TIMESTAMP(),其实也就是当前的系统时间。
7.数据库会自动修改其值,所以在插入记录时不需要指定timestamp字段的名称和timestamp字段的值,你只需要在设计表的时候添加一个timestamp字段即可,插入后该字段的值会自动变为当前系统时间。
8.以后任何时间修改表中的记录时,对应记录的timestamp值会自动被更新为当前的系统时间。
结论:timestamp类型适合用来记录数据的后修改时间,因为只要你更改了记录中其他字段的值,timestamp字段的值都会被自动更新。
看完这个比较你就知道用哪个好啦
我们公司一般用datatime,可控性比较强
jdbc查询Mysql数据库的日期问题
你没说错!
查出来可以保存为String类型具体转化一下就OK了
BBSXP用的MYSQL数据库还是MSSQL数据库
BBSXP同时支持Aess数据库和MSSQL数据库
在Config.asp文件里定义:
IsSqlDataBase=1'定义数据库类别,0为Aess数据库,1为SQL数据库
不知道你是哪个版本,在BBSxp 2008 SP2里Config.asp文件在根目录下。内容如下:
<%
InstallIPAddress="127.0.0.1"'安装BBSXP的IP地址,针对install.asp的访问权限
TablePrefix="BBSXP_"'数据库表的前辍名(一般不用更改)
IsSqlDataBase=0'定义数据库类别,0为Aess数据库,1为SQL数据库
If IsSqlDataBase=0 Then
'''''''''''''''''''''''''''''' Aess数据库设置'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SqlDataBase="database/bbsxp2008.mdb"'数据库路径
SqlProvider="Microsoft.Jet.OLEDB.4.0"'驱动程序[ Microsoft.Jet.OLEDB.4.0 Microsoft.ACE.OLEDB.12.0 ]
SqlPassword=""'ACCESS数据库密码
Connstr="Provider="&SqlProvider&";Jet Oledb:Database Password="&SqlPassword&"; Data Source="&Server.MapPath(SqlDataBase)
SqlNowString="Now()"
SqlChar="'"
IsSqlVer="ACCESS"
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Else
'''''''''''''''''''''''''''''' SQL数据库设置''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SqlLocalName="(local)"'连接IP [本地用(local)外地用IP ]
SqlUserName="sa"'SQL用户名
SqlPassword="1234"'SQL用户密码
SqlDataBase="bbsxp"'数据库名
SqlProvider="SQLOLEDB"'驱动程序 [ SQLOLEDB SQLNCLI ]
ConnStr="Provider="&SqlProvider&"; User ID="&SqlUserName&"; Password="&SqlPassword&"; Initial CataLog="&SqlDataBase&"; Data Source="&SqlLocalName&";"
SqlNowString="GetDate()"
IsSqlVer="MSSQL"
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End If
''''''''''''''''''''''''''以下为专业人员设置选项,普通用户请勿修改''''''''''''''''''''''''''
Session.CodePage="936"'936(简体中文) 950(繁体中文) 65001(Unicode)
BBSxpCharset="GB2312"'GB2312(简体中文) Big5(繁体中文) UTF-8(Unicode)
Response.Charset=BBSxpCharset
Response.Buffer=True
%>
注:
上面bbsxp7b1版本用的是Aess数据库,因为IsSqlDataBase=0
mysql数据库可以修改表的日期格式吗
日期型的字段存储的格式是固定的不可以修改,需要输出时转换成需要的格式,如果你不想输出时转换那么需要设为字符型的,存储时转换.总之不管先转还是后转,一定要转
二、mysql连接时用的IP地址是不是电脑本机上的IP地址呢!
是root用户的话,IP就是<localhost>或<127.0.0.1>,只是代表使用本机,不是代表本机IP地址,*作方法如下:
1、首先,利用Navicat创建一个数据库和表,数据库名为testdb,表为userinfo,并添加一条新记录。
2、用如下的数据库连接字符串访问数据库时,是没有问题的。Driver= MySQL ODBC 5.1 Driver; Server= localhost; Port=3306; DATABASE= testdb; user= root; password= 123456。
3、其中,Server是数据库所在主机IP地址,Prot是连接端口;user和password则为连接数据库的用户名和密码,使用Select* from userinfo可以正确获取到数据。
4、但是当把localhost换成实际的IP地址的时候,就报错了,说明这个数据库testdb是默认没开启访问权限的,默认情况下只允许localhost和127.0.0.1访问。
5、更新root账户的权限。打开mysql命令行窗口,输入grant all privileges on*.* to root@"%" identified by'abc' with grant option;flush privileges。
6、创建一个新账户,如guest,并将可被访问的主机定义为%,即所有主机都可访问该账户。测试,没有问题。
三、mysql 权限设置
背景
在了解动态权限之前,我们先回顾下 MySQL的权限列表。
权限列表大体分为服务级别和表级别,列级别以及大而广的角色(也是MySQL 8.0新增)存储程序等权限。我们看到有一个特殊的 SUPER权限,可以做好多个*作。比如 SET变量,在从机重新指定相关主机信息以及清理二进制日志等。那这里可以看到,SUPER有点太过强大,导致了仅仅想实现子权限变得十分困难,比如用户只能 SET变量,其他的都不想要。那么 MySQL 8.0之前没法实现,权限的细分不够明确,容易让非法用户钻空子。
那么 MySQL 8.0把权限细分为静态权限和动态权限,下面我画了两张详细的区分图,图 1为静态权限,图 2为动态权限。
图 1- MySQL静态权限的权限管理图
图 2-动态权限图
那我们看到其实动态权限就是对 SUPER权限的细分。 SUPER权限在未来将会被废弃掉。
我们来看个简单的例子,
比如,用户'ytt2@localhost',有 SUPER权限。
mysql> show grants for ytt2@'localhost';+---------------------------------------------------------------------------------+| Grants for ytt2@localhost|+---------------------------------------------------------------------------------+| GRANT INSERT, UPDATE, DELETE, CREATE, ALTER, SUPER ON*.* TO ytt2@localhost|+---------------------------------------------------------------------------------+1 row in set(0.00 sec)
但是现在我只想这个用户有 SUPER的子集,设置变量的权限。那么单独给这个用户赋予两个能设置系统变量的动态权限,完了把 SUPER给拿掉。
mysql> grant session_variables_admin,system_variables_admin on*.* to ytt2@'localhost';Query OK, 0 rows affected(0.03 sec)mysql> revoke super on*.* from ytt2@'localhost';Query OK, 0 rows affected, 1 warning(0.02 sec)
我们看到这个 WARNINGS提示 SUPER已经废弃了。
mysql> show warnings;
+---------+------+----------------------------------------------+
| Level| Code| Message|
+---------+------+----------------------------------------------+
| Warning| 1287| The SUPER privilege identifier is deprecated|
+---------+------+----------------------------------------------+
1 row in set(0.00 sec)`
mysql> show grants for ytt2@'localhost';
+-----------------------------------------------------------------------------------+
| Grants for ytt2@localhost|
+-----------------------------------------------------------------------------------+
| GRANT INSERT, UPDATE, DELETE, CREATE, ALTER ON*.* TO ytt2@localhost|
| GRANT SESSION_VARIABLES_ADMIN,SYSTEM_VARIABLES_ADMIN ON*.* TO ytt2@localhost|
+-----------------------------------------------------------------------------------+
2 rows in set(0.00 sec)
当然图 2上还有其它的动态权限,这里就不做特别说明了。