首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL是否为表设置了默认值(特别是DateTime)

MYSQL是否为表设置了默认值(特别是DateTime)
EN

Database Administration用户
提问于 2015-07-30 14:39:49
回答 2查看 3.9K关注 0票数 1

我正在尝试将数据库国际化,但是设置timestamp的地方是使用NOW()而不是UTC_TIMESTAMP(),而且它使用的是亚马逊的RDS和多个MySQL服务器。问题是,每个时区都在各自的时区上,这就造成了对各个时区的分离,将它们转换为UTC,然后再将它们重新翻译回用户时区。

这个数据库有一些140+表,我希望通过在每个表上使用SHOW CREATE来进行比手动搜索更高效的操作,另外,我希望能够在完成时检查是否所有内容都被正确转换。

对于这样的查询,有什么想法吗?

为了清楚起见,我正在寻找一个查询来SELECT我需要的行,我可以从中找出一个INSERT... SELECT语句。

EN

回答 2

Database Administration用户

发布于 2015-07-30 17:51:37

使用@a1ex07应答,我使用了以下查询:

代码语言:javascript
复制
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
  FROM INFORMATION_SCHEMA.COLUMNS 
  WHERE (table_schema, DATA_TYPE) = ('my_schema', 'timestamp') AND COLUMN_DEFAULT IS NOT NULL;

这表明许多人使用的是CURRENT_TIMESTAMP而不是UTC_TIMESTAMP

票数 3
EN

Database Administration用户

发布于 2015-08-01 00:04:31

我认为应该将NOW()存储到TIMESTAMP中。在存储时间时,根据时区修改时间,UTC存储在表中。检索时,执行反向修改。(当然,这假定系统建立了“正确的”时区。见SHOW VARIABLES LIKE '%zone%';.)

这样,如果您的用户分散在全球各地,列包含一个瞬间的时间,但每个用户看到它根据自己的时钟。也就是说,如果我将NOW()存储在时间戳中,而您(无论您在哪里)获取该字段,则它将是“立即”,并且看起来像您的时钟。

如果我把现在()存储在约会时间,你就会看到我的时钟是怎么写的。就像储存在VARCHAR里一样。

如果我将UTC_TIMESTAMP()存储到任意一种数据类型的字段中,那就太恶心了!

但是,多亏了云,你的处境更加混乱。也许在客户机中为会话设置time_zone可以解决这个问题。

或者也许UTC_TIMESTAMP()DATETIME是答案。我认为这将避免云问题,但任何时候都将是UTC。

(大约有5种时间模式,而不仅仅是MySQL - conf调用时间提供的2种模式;另一时区的体育赛事、日历实现等)

编辑

每个连接时区。每个连接的客户端都有自己的时区设置,由会话time_zone变量提供。最初,会话变量从全局time_zone变量中获取其值,但是客户端可以使用以下语句更改自己的时区: mysql> SET time_zone = timezone;

-- http://dev.mysql.com/doc/refman/5.6/en/time-zone-support.html

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/108572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档