The MySQL adapter will work with both Ruby/MySQL, which is a Ruby-based MySQL adapter that comes bundled with Active Record, and with the faster C-based MySQL/Ruby adapter (available both as a gem and from www.tmtm.org/en/mysql/ruby/).

Options:

  • :host - Defaults to "localhost".

  • :port - Defaults to 3306.

  • :socket - Defaults to "/tmp/mysql.sock".

  • :username - Defaults to "root"

  • :password - Defaults to nothing.

  • :database - The name of the database. No default, must be provided.

  • :encoding - (Optional) Sets the client encoding by executing "SET NAMES <encoding>" after connection.

  • :reconnect - Defaults to false (See MySQL documentation: dev.mysql.com/doc/refman/5.0/en/auto-reconnect.html).

  • :sslca - Necessary to use MySQL with an SSL connection.

  • :sslkey - Necessary to use MySQL with an SSL connection.

  • :sslcert - Necessary to use MySQL with an SSL connection.

  • :sslcapath - Necessary to use MySQL with an SSL connection.

  • :sslcipher - Necessary to use MySQL with an SSL connection.

Namespace
Methods
A
C
D
E
L
N
R
S
T
Constants
ADAPTER_NAME = 'MySQL'
 
ENCODINGS = { "armscii8" => nil, "ascii" => Encoding::US_ASCII, "big5" => Encoding::Big5, "binary" => Encoding::ASCII_8BIT, "cp1250" => Encoding::Windows_1250, "cp1251" => Encoding::Windows_1251, "cp1256" => Encoding::Windows_1256, "cp1257" => Encoding::Windows_1257, "cp850" => Encoding::CP850, "cp852" => Encoding::CP852, "cp866" => Encoding::IBM866, "cp932" => Encoding::Windows_31J, "dec8" => nil, "eucjpms" => Encoding::EucJP_ms, "euckr" => Encoding::EUC_KR, "gb2312" => Encoding::EUC_CN, "gbk" => Encoding::GBK, "geostd8" => nil, "greek" => Encoding::ISO_8859_7, "hebrew" => Encoding::ISO_8859_8, "hp8" => nil, "keybcs2" => nil, "koi8r" => Encoding::KOI8_R, "koi8u" => Encoding::KOI8_U, "latin1" => Encoding::ISO_8859_1, "latin2" => Encoding::ISO_8859_2, "latin5" => Encoding::ISO_8859_9, "latin7" => Encoding::ISO_8859_13, "macce" => Encoding::MacCentEuro, "macroman" => Encoding::MacRoman, "sjis" => Encoding::SHIFT_JIS, "swe7" => nil, "tis620" => Encoding::TIS_620, "ucs2" => Encoding::UTF_16BE, "ujis" => Encoding::EucJP_ms, "utf8" => Encoding::UTF_8, "utf8mb4" => Encoding::UTF_8, }
 

Taken from here:

https://github.com/tmtm/ruby-mysql/blob/master/lib/mysql/charset.rb

Author: TOMITA Masahiro <[email protected]>

Class Public methods
new(connection, logger, connection_options, config)
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 126
def initialize(connection, logger, connection_options, config)
  super
  @statements = StatementPool.new(@connection,
                                  config.fetch(:statement_limit) { 1000 })
  @client_encoding = nil
  connect
end
Instance Public methods
active?()

CONNECTION MANAGEMENT ====================================

# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 175
def active?
  if @connection.respond_to?(:stat)
    @connection.stat
  else
    @connection.query 'select 1'
  end

  # mysql-ruby doesn't raise an exception when stat fails.
  if @connection.respond_to?(:errno)
    @connection.errno.zero?
  else
    true
  end
rescue Mysql::Error
  false
end
clear_cache!()

Clears the prepared statements cache.

# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 223
def clear_cache!
  @statements.clear
end
client_encoding()

Get the client encoding for this database

# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 275
def client_encoding
  return @client_encoding if @client_encoding

  result = exec_query(
    "SHOW VARIABLES WHERE Variable_name = 'character_set_client'",
    'SCHEMA')
  @client_encoding = ENCODINGS[result.rows.last.last]
end
disconnect!()

Disconnects from the database if already connected. Otherwise, this method does nothing.

# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 200
def disconnect!
  @connection.close rescue nil
end
exec_delete(sql, name, binds)
Also aliased as: exec_update
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 326
def exec_delete(sql, name, binds)
  log(sql, name, binds) do
    exec_stmt(sql, name, binds) do |cols, stmt|
      stmt.affected_rows
    end
  end
end
exec_query(sql, name = 'SQL', binds = [])
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 284
def exec_query(sql, name = 'SQL', binds = [])
  log(sql, name, binds) do
    exec_stmt(sql, name, binds) do |cols, stmt|
      ActiveRecord::Result.new(cols, stmt.to_a) if cols
    end
  end
end
exec_update(sql, name, binds)
execute_and_free(sql, name = nil)
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 313
def execute_and_free(sql, name = nil)
  result = execute(sql, name)
  ret = yield result
  result.free
  ret
end
last_inserted_id(result)
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 292
def last_inserted_id(result)
  @connection.insert_id
end
reconnect!()
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 192
def reconnect!
  disconnect!
  clear_cache!
  connect
end
reset!()
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 204
def reset!
  if @connection.respond_to?(:change_user)
    # See http://bugs.mysql.com/bug.php?id=33540 -- the workaround way to
    # reset the connection is to change the user to the same user.
    @connection.change_user(@config[:username], @config[:password], @config[:database])
    configure_connection
  end
end
select_rows(sql, name = nil)

DATABASE STATEMENTS ======================================

# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 215
def select_rows(sql, name = nil)
  @connection.query_with_result = true
  rows = exec_without_stmt(sql, name).rows
  @connection.more_results && @connection.next_result    # invoking stored procedures with CLIENT_MULTI_RESULTS requires this to tidy up else connection will be dropped
  rows
end
supports_statement_cache?()

Returns true, since this connection adapter supports prepared statement caching.

# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 136
def supports_statement_cache?
  true
end
type_cast(value, column)

QUOTING ==================================================

# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 163
def type_cast(value, column)
  return super unless value == true || value == false

  value ? 1 : 0
end