Luke Towers bd9f88587f
Fix issues with MySQL utf8mb4 support
Fixes: https://github.com/octobercms/october/issues/1927. Related: https://github.com/laravel/framework/issues/17508. Issue occurs when database configuration related to full support for the utf8mb4 charset is incorrect; MySQL > 5.7 & MariaDB > 10.2 doesn't have this issue because they default to the correct configuration values; this fix solves the issue for older versions of MySQL and MariaDB without requiring database server configuration changes.

The root cause of the issue with the utf8mb4 encoding is that both InnoDB and MyISAM have too low of an index key prefix limit (767 bytes and 1000 bytes respectively) to properly store 255 4-byte characters; which would take 1024 bytes. See the docs on InnoDB limitations: https://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html

In MySQL >= 5.7 & MariaDB >= 10.2 this limit has been bumped to 3076 bytes by the changing of the default value of the `innodb_large_prefix` configuration property (introduced in MySQL 5.5) to true; which is what bumps up the limit. In order to manually set that property to true on earlier versions, `innodb_file_format` must be set to `BARRACUDA` and `row_format` must be `DYNAMIC` or `COMPRESSED`. See http://mechanics.flite.com/blog/2014/07/29/using-innodb-large-prefix-to-avoid-error-1071/ for more information. 

This change fixes the issue by changing the default string length to 191 (total of 764 bytes, within the older size limit) when the MySQL database config is detected to be using the utf8mb4 charset.
2018-02-17 17:00:32 -06:00
2017-06-08 16:26:24 +10:00
2018-01-07 19:55:53 -06:00
2017-02-15 05:50:00 +11:00
2017-05-13 12:31:34 +10:00
2016-05-13 06:43:26 +10:00
2016-05-13 06:43:26 +10:00
2017-10-27 16:06:56 -06:00

October

October is a Content Management System (CMS) and web platform whose sole purpose is to make your development workflow simple again. It was born out of frustration with existing systems. We feel building websites has become a convoluted and confusing process that leaves developers unsatisfied. We want to turn you around to the simpler side and get back to basics.

October's mission is to show the world that web development is not rocket science.

Build Status License

Learning October

The best place to learn October is by reading the documentation or following some tutorials.

You may also watch these introductory videos for beginners and advanced users.

Installing October

Instructions on how to install October can be found at the installation guide.

Quick start installation

For advanced users, run this in your terminal to install October from command line:

php -r "eval('?>'.file_get_contents('https://octobercms.com/api/installer'));"

If you plan on using a database, run this command:

php artisan october:install

Development Team

October was created by Alexey Bobkov and Samuel Georges, who both continue to develop the platform.

Foundation library

The CMS uses Laravel as a foundation PHP framework.

Contact

You can communicate with us using the following mediums:

License

The OctoberCMS platform is open-sourced software licensed under the MIT license.

Contributing

Before sending a Pull Request, be sure to review the Contributing Guidelines first.

Coding standards

Please follow the following guides and code standards:

Description
No description provided
Readme 64 MiB
Languages
PHP 62.3%
JavaScript 17.8%
Less 9.8%
CSS 9.7%
HTML 0.2%
Other 0.1%