我在MySql中有日期类型列。 默认情况下,MySql日期格式为YYYY / MM / DD。 但实际上我更喜欢使用DD / MM / YYYY格式。
我可以更改列日期格式吗?
答案 0 :(得分:2)
不,您无法更改DATE,DATETIME或TIMESTAMP列的默认MySQL格式。
但您可以在SQL语句中使用MySQL函数将DATE表达式作为不同格式的字符串输出。
DATE_FORMAT( datecol , '%m/%d/%Y') AS datecol
(这在SELECT列表中可以正常工作,但是避免在任何谓词中使用它(即WHERE子句)。在那里,你需要引用裸列,并转换首选格式的字符串'MM / DD / YYYY'使用STR_TO_DATE函数,例如
datecol >= STR_TO_DATE('07/16/2012','%m/%d/%Y')
话虽如此,我认为在与数据库的交互中使用MySQL默认的DATE格式以及处理代码中的格式更改会更好。
答案 1 :(得分:1)
其他DBMS具有默认格式,即使在会话的基础上也可以更改。例如,在Oracle中,您只需更改NLS_DATE_FORMAT
会话变量,Oracle将使用您的自定义格式进行输入和输出。 MySQL没有。
有几个server variables(date_format
和datetime_format
)您可能会认为适合此目的:
mysql> SHOW VARIABLES LIKE 'date%_format';
+-----------------+-------------------+
| Variable_name | Value |
+-----------------+-------------------+
| date_format | %Y-%m-%d |
| datetime_format | %Y-%m-%d %H:%i:%s |
+-----------------+-------------------+
首先,它们是服务器端,它们不是动态的(它们不能在运行时设置)。但最糟糕的是,他们从未真正使用过。这些变量从未影响日期格式。它们目前已被弃用并排队等待删除。
总结:不,你不能。 日期格式已修复。
答案 2 :(得分:0)
尝试echo date('d/m/Y', strtotime($date));
这将占用您现有的日期,将其转换为UNIX时间并将其转换回具有所需格式的日期。
答案 3 :(得分:0)
正如其他人所解释的那样,这是不可能的,但这里是替代解决方案,它需要一点调整,但它的工作方式与日期列相同。
我开始思考,如何才能使格式化成为可能。我有个主意。如何触发呢?我的意思是,添加类型为char
的列,然后使用MySQL触发器更新该列。这很有效!我做了一些与触发器有关的研究,最后提出了这些问题:
CREATE TRIGGER timestampper BEFORE INSERT ON table
FOR EACH
ROW SET NEW.timestamp = DATE_FORMAT(NOW(), '%d/%m/%Y');
CREATE TRIGGER timestampper2 BEFORE UPDATE ON table
FOR EACH
ROW SET NEW.timestamp = DATE_FORMAT(NOW(), '%d/%m/%Y');
您不能将TIMESTAMP
或DATE
用作列类型,因为它们具有自己的格式,并且会自动更新。
所以,这是您的替代时间戳或日期替代方案!希望这有所帮助,至少我很高兴我能让它发挥作用。