mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
NEW Allow setting sql_mode via config (#9721)
This commit is contained in:
parent
8c0ff67c55
commit
f00f64120d
@ -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
|
||||
|
@ -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`.
|
||||
|
||||
|
@ -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']);
|
||||
|
Loading…
Reference in New Issue
Block a user