diff --git a/docs/en/00_Getting_Started/00_Server_Requirements.md b/docs/en/00_Getting_Started/00_Server_Requirements.md index 51a7424ab..c873a7e4f 100644 --- a/docs/en/00_Getting_Started/00_Server_Requirements.md +++ b/docs/en/00_Getting_Started/00_Server_Requirements.md @@ -1,7 +1,7 @@ --- title: Server Requirements icon: server -summary: What you will need to run Silverstripe CMS on a web server +summary: What you will need to run Silverstripe CMS on a web server --- @@ -27,7 +27,11 @@ Use [phpinfo()](http://php.net/manual/en/function.phpinfo.php) to inspect your c * PostgreSQL ([third party module](https://addons.silverstripe.org/add-ons/silverstripe/postgresql), community supported) * SQL Server ([third party module](https://addons.silverstripe.org/add-ons/silverstripe/mssql), community supported) * SQLite ([third party module](https://addons.silverstripe.org/add-ons/silverstripe/sqlite3), community supported) - + + ### Connection mode (sql_mode) when using MySQL server >=5.7.5 + +In MySQL versions >=5.7.5, the `ANSI` sql_mode setting behaves differently and includes the `ONLY_FULL_GROUP_BY` setting. It is generally recommended to leave this setting as-is because it results in deterministic SQL. However, for some advanced cases, the sql_mode can be configured on the database connection via the configuration API (see `MySQLDatabase::$sql_mode` for more details.) This setting is only available in Silverstripe CMS 4.7 and later. + ## Webserver Configuration ### Overview @@ -138,14 +142,14 @@ See [silverstripe/vendor-plugin](https://github.com/silverstripe/vendor-plugin) The default installation includes [silverstripe/errorpage](https://addons.silverstripe.org/add-ons/silverstripe/errorpage), which generates static error pages that bypass PHP execution when those pages are published in the CMS. Once published, the static files are located in `public/assets/error-404.html` and `public/assets/error-500.html`. -The default `public/.htaccess` file is configured to have Apache serve those pages based on their HTTP status code. +The default `public/.htaccess` file is configured to have Apache serve those pages based on their HTTP status code. ### Other webservers (Nginx, IIS, Lighttpd) Serving through webservers other than Apache requires more manual configuration, since the defaults configured through `.htaccess` don't apply. Please apply the considerations above to your webserver to ensure a secure hosting environment. -In particular, configure protected assets correctly to avoid exposing draft or protected files uploaded through the CMS. +In particular, configure protected assets correctly to avoid exposing draft or protected files uploaded through the CMS. There are various community supported installation instructions for different environments. Nginx is a popular choice, see [Nginx webserver configuration](https://forum.silverstripe.org/t/nginx-webserver-configuration/2246). @@ -182,9 +186,9 @@ SilverStripe's PHP support has changed over time and if you are looking to upgra SilverStripe CMS supports the following web browsers: * Google Chrome * Internet Explorer 11 -* Microsoft Edge +* Microsoft Edge * Mozilla Firefox - + We aim to provide satisfactory experiences in Apple Safari. SilverStripe CMS works well across Windows, Linux, and Mac operating systems. ## End user requirements diff --git a/docs/en/04_Changelogs/4.7.0.md b/docs/en/04_Changelogs/4.7.0.md index 050180cc7..c2a6b6df5 100644 --- a/docs/en/04_Changelogs/4.7.0.md +++ b/docs/en/04_Changelogs/4.7.0.md @@ -5,6 +5,7 @@ - [Experimental support for PHP 8](#experimental-support-for-php-8) - [Support for Symfony 4 Components](#support-for-symfony-4-components) - [Default MySQL collation updated](#default-mysql-collation-updated) +- [MySQL connection mode configurable](#mysql-connection-mode-now-configurable) - [Flysystem dependency shifted](#flysystem-dependency-shifted) ## New features @@ -59,6 +60,10 @@ You can rectify this by upgrading MySQL, enabling the `innodb_large_prefix` sett reducing the size of affected fields. If none of these solutions are currently suitable, you can remove the new collation configuration to default back to the previous default collation. +### MySQL connection mode now configurable + +In MySQL versions >=5.7.5, the `ANSI` sql_mode setting behaves differently and includes the `ONLY_FULL_GROUP_BY` setting. It is generally recommended to leave this setting as-is because it results in deterministic SQL. However, for some advanced cases, the sql_mode can now be configured on the database connection via the configuration API (see `MySQLDatabase::$sql_mode` for more details.) + ### Flysystem dependency shifted Previously the Flysystem package was pulled in via the `silverstripe/framework` module, but only @@ -71,4 +76,3 @@ An edgecase exists where a project can update to `silverstripe/framework 4.7.0` `silverstripe/assets 1.6.x`, and lose the Flysystem dependency entirely. The best way to avoid this is by ensuring you update all core modules to the new minor release at once, ideally through a core recipe like `silverstripe/recipe-core`. - diff --git a/src/ORM/Connect/MySQLDatabase.php b/src/ORM/Connect/MySQLDatabase.php index 942c7bd16..7f5d35477 100644 --- a/src/ORM/Connect/MySQLDatabase.php +++ b/src/ORM/Connect/MySQLDatabase.php @@ -49,6 +49,15 @@ class MySQLDatabase extends Database implements TransactionManager */ private static $charset = 'utf8'; + /** + * SQL Mode used on connections to MySQL. Defaults to ANSI. For basic ORM + * compatibility, this setting must always include ANSI or ANSI_QUOTES. + * + * @config + * @var string + */ + private static $sql_mode = 'ANSI'; + /** * Cache for getTransactionManager() * @@ -84,8 +93,8 @@ class MySQLDatabase extends Database implements TransactionManager // Notify connector of parameters $this->connector->connect($parameters); - // This is important! - $this->setSQLMode('ANSI'); + // Set sql_mode + $this->setSQLMode(static::config()->get('sql_mode')); if (isset($parameters['timezone'])) { $this->selectTimezone($parameters['timezone']);