背景
在做MYSQL数据库移植的时候,遇到一些问题,把这些问题记录下来,以备后查
sql_mode
很多校验都和这个mode有直接关系
- ## 导入sql文件,发生如下错误
- MySQL:[Err] 1292 - Incorrect datetime value: '0000-00-00 00:00:00' for column 'CREATE_TIME' at row 1
诱因
这是由于当前的MySQL不支持datetime为0的状况。
通过一下命令查选当前的sql_mode
select @@global.sql_mode;

解决方式
设置当前的sql_mode
- ## 当前
- set @@sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
进入mysql命令界面执行一下命令
- ## 全局
- set @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
PS:以上两种方式都能暂时解决问题,但是当数据库重启之后,之前做的修改会失效
修改my.ini配置文件
只有修改配置文件,才能永久的解决这个问题,在my.ini文件中追加
sql_mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
重新执行 select @@global.sql_mode;

一直报表格不存在的错
确认表格存在,但是查询一直报表格不存在报错,此时可能是因为以为mysql对大小写敏感导致的,可以修改该配置
在my.ini文件中追加以下代码
- ## 使用该命令查看当前系统中的大小写敏感配置
- show global variables like '%case%';
- ## lower_case_file_system 系统是大小写敏感的-不需要改
- ## lower_case_table_names 当前是大小写敏感的,需要改成1
- +------------------------+-------+
- | Variable_name | Value |
- +------------------------+-------+
- | lower_case_file_system | OFF |
- | lower_case_table_names | 0 |
- +------------------------+-------+
- 2 rows in set (0.01 sec)
lower_case_table_names = 1
增加配置之后,重启服务再次查看
问题得以解决,如果是不在配置文件中配置,会在下次服务重启,使得之前的配置失效,产生一些不太好排查的问题,所以,如果不是特意需要暂时修改的话,都在配置文件中修改