我在 PHP + MySQL 应用程序中工作。该应用程序对我来说工作正常。但是当我将其托管在另一台服务器上时,出现了 MySQL 错误:
Error Code: 1364. Field 'field' doesn't have a default value
我知道这是 MySQL 版本的问题,我们应该为所有列设置默认值。但目前我有 100 多张 table 。因此,我需要将默认值设置为 NULL
所有表中还没有默认值的所有列。
我不能使用严格模式
选项,因为服务器是共享的。是否可以一步设置而不是为每个表设置?如果不可能,请告诉我最简单的设置方法。
任何帮助将不胜感激
最佳答案
对于遇到此问题的任何其他人,需要编写一些代码才能自动执行,但您可以按照以下方式执行此操作:
首先运行以下查询:
SELECT table_schema,table_name,column_name,data_type FROM information_schema.columns WHERE IS_NULLABLE='NO' AND column_default is null AND column_key=''
接下来,对于从上述查询返回的每一行,执行以下操作:
If data_type contains 'int' set default to 0
else if data_type='datetime' set default to '0000-00-00 00:00:00'
else if data_type='date' set default to '0000-00-00'
else if data_type='time' set default to '00:00:00'
else set default to ''
创建并运行以下查询,将所有 [[...]] 变量替换为它们的正确值:
ALTER TABLE `[[table_schema]]`.`[[table_name]]` ALTER COLUMN `[[column_name]]` SET DEFAULT '[[default]]'
这应该替换所有数据库、所有表、所有设置为 NOT NULL 且不是主键且未设置默认值的列的默认值。
关于mysql - 为数据库中的所有列设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39504212/