尝试将DEFAULT值插入MySQL数据库列
简单的例子
CREATE TABLE test (
id int(11) NOT NULL,
name varchar(10) NOT NULL,
test_date date NOT NULL
) ENGINE=MyISAM;
在mysql上我可以做到
INSERT INTO test(id) VALUES(1);
工作正常
现在我转到drupal 7并执行以下操作
$data = array('id' => 1);
$result = db_insert('test')->fields($data)->execute();
我收到以下错误
PDOException: SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default value: INSERT INTO {test} (id) VALUES (:db_insert_placeholder_0); Array ( [:db_insert_placeholder_0] => 1 )
MySQL上的“sql模式”设置为''(空字符串)
问题
由于
=============================================== ========================= 挖掘后的解释:
查看允许的类型,您可以在此处查看
function:getFieldTypeMap()
'varchar:normal' => 'VARCHAR',
'char:normal' => 'CHAR',
'text:tiny' => 'TINYTEXT',
'text:small' => 'TINYTEXT',
'text:medium' => 'MEDIUMTEXT',
'text:big' => 'LONGTEXT',
'text:normal' => 'TEXT',
'serial:tiny' => 'TINYINT',
'serial:small' => 'SMALLINT',
'serial:medium' => 'MEDIUMINT',
'serial:big' => 'BIGINT',
'serial:normal' => 'INT',
'int:tiny' => 'TINYINT',
'int:small' => 'SMALLINT',
'int:medium' => 'MEDIUMINT',
'int:big' => 'BIGINT',
'int:normal' => 'INT',
'float:tiny' => 'FLOAT',
'float:small' => 'FLOAT',
'float:medium' => 'FLOAT',
'float:big' => 'DOUBLE',
'float:normal' => 'FLOAT',
'numeric:normal' => 'DECIMAL',
'blob:big' => 'LONGBLOB',
'blob:normal' => 'BLOB',
您可能有兴趣看的其他功能(逻辑涓涓细流)
如果您传递除此之外的任何内容,格式错误的表sql将阻止您创建表本身
如果你已经在mysql中拥有包含日期和日期时间字段的数据库字段,那么你可能需要创建一个时间戳字段以使其与D7兼容
答案 0 :(得分:0)
有可能SQL MODE没有全局设置,而是在用户会话中设置,尝试获取此信息,执行此查询 -
SELECT @@SESSION.SQL_MODE;