出于某种原因,我甚至无法在表格中选择无效日期。我如何强制选择?我刚收到:
select * from table
>> Mysql2::Error: Invalid date: 1900-00-00
我不是要插入,只是选择。我可以在选择查询中设置允许无效日期吗?
mysql --version
mysql Ver 14.14 Distrib 5.1.61, for debian-linux-gnu (i686) using readline 6.1
mysql> select @@global.sql_mode;
+-------------------+
| @@global.sql_mode |
+-------------------+
| |
答案 0 :(得分:15)
我这样做是为了忽略无效日期:
SET SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
答案 1 :(得分:8)
mysql -u root -p
sql-modes
SELECT @@GLOBAL.sql_mode;
sql-modes
SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ALLOW_INVALID_DATES';
ALLOW_INVALID_DATES
并删除NO_ZERO_DATE, NO_ZERO_IN_DATE
/etc/init.d/mysql start
答案 2 :(得分:3)
Solution Link
- 从命令行which mysqld
- 应该得到像/usr/sbin/mysqld
这样的二进制文件的位置
- 对配置文件/usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
的路径进行排序
- 您的bash响应应如下所示:Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
- 按顺序查看文件以查看更改位置(如果文件不存在则不会被引用)
- 查找当前模式。打开终端并登录mysql数据库mysql -u database_user -p -e "select @@sql_mode"
- 通过将以下代码添加到配置文件来修改要更改的SQL模式
[mysqld]
sql-mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ALLOW_INVALID_DATES"
- 保存配置文件并重新启动mysql服务
答案 3 :(得分:0)
这个解决了我的问题。我在本地MySQL 5.7 ubuntu 18.04中进行了测试。
set global sql_mode="NO_ENGINE_SUBSTITUTION";
在全局运行此查询之前,我在 /etc/mysql/conf.d 目录中添加了cnf文件。 cnf文件名为 mysql.cnf 和代码
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
然后我重新启动mysql
sudo service mysql restart
希望这可以帮助某人。