У меня есть сценарий, который использует Class :: DBIx :: Schema-> deploy для создания базы данных для приложения, которое я создаю.DBIx :: Class :: Schema :: Loader, определяющий CURRENT_TIMESTAMP как строку, а не ссылку на строку
Я использую MySQL 5.6.19
Некоторые из таблиц имеют даты-поля, которые имеют значение по умолчанию CURRENT_TIMESTAMP (который действителен для MySQL версий> 5.6)
Когда я запускаю код для заполнить базу данных, развертывание ставит кавычки CURRENT_TIMESTAMP следующим образом:
CREATE TABLE `company_info` (
`id` bigint unsigned NOT NULL auto_increment,
`ugroup` bigint unsigned NULL,
`created` datetime NULL DEFAULT 'CURRENT_TIMESTAMP',
`num_employees` integer NOT NULL DEFAULT 1,
`type` char(16) NULL,
INDEX `company_info_idx_ugroup` (`ugroup`),
PRIMARY KEY (`id`),
CONSTRAINT `company_info_fk_ugroup` FOREIGN KEY (`ugroup`) REFERENCES `groups` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB
кавычек вызовет ошибку «недопустимое значение по умолчанию для" создан», удалив кавычки и выполнив команду из командной строки работает нормально, если котировки ft на месте, он терпит неудачу.
Это происходит потому, что в схеме :: Result, у нас есть строка "CURRENT_TIMESTAMP", а затем строку ссылочный \ "CURRENT_TIMESTAMP"
Schema :: Result :: CompanyInfo выглядит следующим образом и генерируется;
use utf8;
package Schema::Result::CompanyInfo;
# Created by DBIx::Class::Schema::Loader
# DO NOT MODIFY THE FIRST PART OF THIS FILE
use strict;
use warnings;
use base 'DBIx::Class::Core';
__PACKAGE__->load_components("InflateColumn::DateTime");
__PACKAGE__->table("company_info");
__PACKAGE__->add_columns(
"id",
{
data_type => "bigint",
extra => { unsigned => 1 },
is_auto_increment => 1,
is_nullable => 0,
},
"ugroup",
{
data_type => "bigint",
extra => { unsigned => 1 },
is_foreign_key => 1,
is_nullable => 1,
},
"created",
{
data_type => "datetime",
datetime_undef_if_invalid => 1,
default_value => "CURRENT_TIMESTAMP",
is_nullable => 1,
},
"num_employees",
{ data_type => "integer", default_value => 1, is_nullable => 0 },
"type",
{ data_type => "char", is_nullable => 1, size => 16 },
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"ugroup",
"Schema::Result::Group",
{ id => "ugroup" },
{
is_deferrable => 1,
join_type => "LEFT",
on_delete => "SET NULL",
on_update => "CASCADE",
},
);
# Created by DBIx::Class::Schema::Loader v0.07042 @ 2014-11-24 14:30:12
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Q6PHwuB2Zk74lVC08u8CMQ
# You can replace this text with custom code or comments, and it will be preserved on regeneration
1;
Изменение default_value => "CURRENT_TIMESTAMP", в default_value => \ "CURRENT_TIMESTAMP", исправляет эту проблему, однако, так как это генерируется DBIx :: Class :: Schema :: Loader Я предпочел бы не вручную отредактируйте все связанные файлы.
Это ошибка или есть способ сообщить DBIx :: Class :: Schema :: Loader, чтобы создать ссылку на строку вокруг CURRENT_TIMESTAMP?
Благодаря
Да, что работает - спасибо, за исключением того, что файл схемы генерируется DBIx :: Class :: Schema :: Loader, так что вы знаете, если есть способ получить DBIx :: Class :: Schema: : Loader для правильного создания файла? Я уточню вопрос. – mark