运行Console\cake schema create时,CakePHP如何设置MySQL的SQL模式?非CakePHP的等效方法是使用PDO::MYSQL_ATTR_INIT_COMMAND参数在PDO构造函数中运行此查询:
Console\cake schema create
PDO::MYSQL_ATTR_INIT_COMMAND
SET @@SESSION.sql_mode='TRADITIONAL,NO_AUTO_VALUE_ON_ZERO';
ryevplcw1#
您可以配置数据库源。
$config['flags'] = [ PDO::MYSQL_ATTR_INIT_COMMAND => "SET @@SESSION.sql_mode='TRADITIONAL,NO_AUTO_VALUE_ON_ZERO';" ];
请参见MySQL驱动程序类的connect()方法代码。但是当您同时使用$config['encoding']时,这可能是一个问题...请参见第163行。:(这需要在核心中进行修复。但是你可以扩展这个类(MysqlExtended或类似的东西),根据需要改变它并使用它。只需要重载connect()方法。然后使用这个驱动程序而不是原来的连接。
$config['encoding']
vx6bjr1n2#
您可以创建/编辑AppSchema构造函数(请注意,您的项目中可能有多个示例),获取数据源并执行查询:
AppSchema
class AppSchema extends CakeSchema { public function __construct($options = array()) { $db = ConnectionManager::getDataSource($this->connection); $db->execute("SET @@SESSION.sql_mode='TRADITIONAL,NO_AUTO_VALUE_ON_ZERO'"); parent::__construct($options); } }
这将使用所需的SQL模式加载您的方案。更具体地说,它 * 不 * 强制应用程序本身使用给定的SQL模式。可能的使用案例:
SET @@SESSION.sql_mode='TRADITIONAL,NO_AUTO_VALUE_ON_ZERO'
SET @@SESSION.sql_mode=''
更一般地说,您可以(我建议您这样做)通过编辑app/Config/database.php处的DATABASE_CONFIG类中的相应属性来全局更改整个连接的SQL模式:
app/Config/database.php
DATABASE_CONFIG
class DATABASE_CONFIG { public $default = array( 'datasource' => 'Database/Mysql', // … 'settings' => array( '@@SESSION.sql_mode' => "'TRADITIONAL,NO_AUTO_VALUE_ON_ZERO'", ), ); }
ar5n3qh53#
对于app.php中的CakePHP 3,“数据源”部分,添加:
'flags' => [ PDO::MYSQL_ATTR_INIT_COMMAND => "SET @@SESSION.sql_mode='STRICT_ALL_TABLES,NO_ENGINE_SUBSTITUTION';" ]
3条答案
按热度按时间ryevplcw1#
您可以配置数据库源。
请参见MySQL驱动程序类的connect()方法代码。
但是当您同时使用
$config['encoding']
时,这可能是一个问题...请参见第163行。:(这需要在核心中进行修复。但是你可以扩展这个类(MysqlExtended或类似的东西),根据需要改变它并使用它。只需要重载connect()方法。然后使用这个驱动程序而不是原来的连接。
vx6bjr1n2#
您可以创建/编辑
AppSchema
构造函数(请注意,您的项目中可能有多个示例),获取数据源并执行查询:这将使用所需的SQL模式加载您的方案。更具体地说,它 * 不 * 强制应用程序本身使用给定的SQL模式。
可能的使用案例:
更一般地说,您可以(我建议您这样做)通过编辑
app/Config/database.php
处的DATABASE_CONFIG
类中的相应属性来全局更改整个连接的SQL模式:ar5n3qh53#
对于app.php中的CakePHP 3,“数据源”部分,添加: