Skip to content

Commit

Permalink
Remove SET NAMES, set collation using variable
Browse files Browse the repository at this point in the history
Fixes malformed packet error that occurred with MariaDB client
connecting to RDS Aurora (MySQL 5.7) database.
  • Loading branch information
robinroestenburg committed Jan 26, 2021
1 parent f250208 commit 1d09067
Showing 1 changed file with 6 additions and 10 deletions.
Expand Up @@ -751,6 +751,11 @@ def configure_connection
wait_timeout = 2147483 unless wait_timeout.is_a?(Integer)
variables["wait_timeout"] = wait_timeout

# Set the collation of the connection character set.
if @config[:collation]
variables["collation_connection"] = @config[:collation]
end

defaults = [":default", :default].to_set

# Make MySQL reject illegal values rather than truncating or blanking them, see
Expand All @@ -770,15 +775,6 @@ def configure_connection
end
sql_mode_assignment = "@@SESSION.sql_mode = #{sql_mode}, " if sql_mode

# NAMES does not have an equals sign, see
# https://dev.mysql.com/doc/refman/en/set-names.html
# (trailing comma because variable_assignments will always have content)
if @config[:encoding]
encoding = +"NAMES #{@config[:encoding]}"
encoding << " COLLATE #{@config[:collation]}" if @config[:collation]
encoding << ", "
end

# Gather up all of the SET variables...
variable_assignments = variables.map do |k, v|
if defaults.include?(v)
Expand All @@ -790,7 +786,7 @@ def configure_connection
end.compact.join(", ")

# ...and send them all in one query
execute("SET #{encoding} #{sql_mode_assignment} #{variable_assignments}", "SCHEMA")
execute("SET #{sql_mode_assignment} #{variable_assignments}", "SCHEMA")
end

def column_definitions(table_name) # :nodoc:
Expand Down

0 comments on commit 1d09067

Please sign in to comment.