aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/mysql
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2018-12-19 08:38:12 +0900
committerRyuta Kamizono <kamipo@gmail.com>2018-12-19 08:38:12 +0900
commit0fa5b5510c6faefc33ab3715e08b2604195a1063 (patch)
tree563ed97cfd1fc4c4584d3016ac05c27bbf5a2e3a /activerecord/lib/active_record/connection_adapters/mysql
parent5b5319413a611c949cb796351ff42fa0c0299252 (diff)
downloadrails-0fa5b5510c6faefc33ab3715e08b2604195a1063.tar.gz
rails-0fa5b5510c6faefc33ab3715e08b2604195a1063.tar.bz2
rails-0fa5b5510c6faefc33ab3715e08b2604195a1063.zip
Use `utf8mb4` charset for internal tables if the row format `DYNAMIC` by default
The indexing issue on `utf8mb4` columns is resolved since MySQL 5.7.9.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/mysql')
-rw-r--r--activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb10
1 files changed, 9 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb
index 4894fd1c08..66db4e4149 100644
--- a/activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb
+++ b/activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb
@@ -79,7 +79,7 @@ module ActiveRecord
def internal_string_options_for_primary_key
super.tap do |options|
- if CHARSETS_OF_4BYTES_MAXLEN.include?(charset) && (mariadb? || version < "8.0.0")
+ if !row_format_dynamic_by_default? && CHARSETS_OF_4BYTES_MAXLEN.include?(charset)
options[:collation] = collation.sub(/\A[^_]+/, "utf8")
end
end
@@ -96,6 +96,14 @@ module ActiveRecord
private
CHARSETS_OF_4BYTES_MAXLEN = ["utf8mb4", "utf16", "utf16le", "utf32"]
+ def row_format_dynamic_by_default?
+ if mariadb?
+ version >= "10.2.2"
+ else
+ version >= "5.7.9"
+ end
+ end
+
def schema_creation
MySQL::SchemaCreation.new(self)
end