lib/mysql2/error.rb
def clean_message(message)
      if @server_version && @server_version > 50500
        message.encode(**ENCODE_OPTS)
      else
        message.encode(Encoding::UTF_8, **ENCODE_OPTS)
      end
    end
# In MySQL 5.5+ error messages are always constructed server-side as UTF-8
# then returned in the encoding set by the `character_set_results` system
# variable.
#
# See http://dev.mysql.com/doc/refman/5.5/en/charset-errors.html for
# more context.
#
# Before MySQL 5.5 error message template strings are in whatever encoding
# is associated with the error message language.
# See http://dev.mysql.com/doc/refman/5.1/en/error-message-language.html
# for more information.
#
# The issue is that the user-data inserted in the message could potentially
# be in any encoding MySQL supports and is insert into the latin1, euckr or
# koi8r string raw. Meaning there's a high probability the string will be
# corrupt encoding-wise.
#
# See http://dev.mysql.com/doc/refman/5.1/en/charset-errors.html for
# more information.
#
# So in an attempt to make sure the error message string is always in a valid
# encoding, we'll assume UTF-8 and clean the string of anything that's not a
# valid UTF-8 character.
#
# Returns a valid UTF-8 string.
In MySQL 5.5+ error messages are always constructed server-side as UTF-8
then returned in the encoding set by the `character_set_results` system
variable.



Before MySQL 5.5 error message template strings are in whatever encoding
is associated with the error message language.

The issue is that the user-data inserted in the message could potentially
be in any encoding MySQL supports and is insert into the latin1, euckr or
koi8r string raw. Meaning there's a high probability the string will be
corrupt encoding-wise.



So in an attempt to make sure the error message string is always in a valid
encoding, we'll assume UTF-8 and clean the string of anything that's not a
valid UTF-8 character.

Returns a valid UTF-8 string.
In MySQL 5 . 5 + error messages are always constructed server - side as UTF - 8 then returned in the encoding set by the ` character_set_results ` system variable . Before MySQL 5 . 5 error message template strings are in whatever encoding is associated with the error message language . The issue is that the user - data inserted in the message could potentially be in any encoding MySQL supports and is insert into the latin1 euckr or koi8r string raw . Meaning there ' s a high probability the string will be corrupt encoding - wise . So in an attempt to make sure the error message string is always in a valid encoding we ' ll assume UTF - 8 and clean the string of anything that ' s not a valid UTF - 8 character . Returns a valid UTF - 8 string .
def clean_message(message)
      if @server_version && @server_version > 50500
        message.encode(**ENCODE_OPTS)
      else
        message.encode(Encoding::UTF_8, **ENCODE_OPTS)
      end
    end
def clean_message ( message ) if @server_version && @server_version > 50500 message . encode ( ** ENCODE_OPTS ) else message . encode ( Encoding :: UTF_8 , ** ENCODE_OPTS ) end end
In MySQL 5.5+ error messages are always constructed server-side as UTF-8
then returned in the encoding set by the `character_set_results` system
variable.
In MySQL 5 . 5 + error messages are always constructed server - side as UTF - 8 then returned in the encoding set by the ` character_set_results ` system variable .
message