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 ” 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.
Methods
A
C
D
E
L
N
R
S
T
Classes and Modules
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

ENCODINGS = Hash.new { |h,k| h[k] = k }
Class Public methods
new(connection, logger, connection_options, config)
     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 126
126:       def initialize(connection, logger, connection_options, config)
127:         super
128:         @statements = StatementPool.new(@connection,
129:                                         config.fetch(:statement_limit) { 1000 })
130:         @client_encoding = nil
131:         connect
132:       end
Instance Public methods
active?()

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

     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 175
175:       def active?
176:         if @connection.respond_to?(:stat)
177:           @connection.stat
178:         else
179:           @connection.query 'select 1'
180:         end
181: 
182:         # mysql-ruby doesn't raise an exception when stat fails.
183:         if @connection.respond_to?(:errno)
184:           @connection.errno.zero?
185:         else
186:           true
187:         end
188:       rescue Mysql::Error
189:         false
190:       end
clear_cache!()

Clears the prepared statements cache.

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

Get the client encoding for this database

     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 275
275:       def client_encoding
276:         return @client_encoding if @client_encoding
277: 
278:         result = exec_query(
279:           "SHOW VARIABLES WHERE Variable_name = 'character_set_client'",
280:           'SCHEMA')
281:         @client_encoding = ENCODINGS[result.rows.last.last]
282:       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
200:       def disconnect!
201:         @connection.close rescue nil
202:       end
exec_delete(sql, name, binds)
This method is also aliased as exec_update
     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 326
326:       def exec_delete(sql, name, binds)
327:         log(sql, name, binds) do
328:           exec_stmt(sql, name, binds) do |cols, stmt|
329:             stmt.affected_rows
330:           end
331:         end
332:       end
exec_query(sql, name = 'SQL', binds = [])
     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 284
284:       def exec_query(sql, name = 'SQL', binds = [])
285:         log(sql, name, binds) do
286:           exec_stmt(sql, name, binds) do |cols, stmt|
287:             ActiveRecord::Result.new(cols, stmt.to_a) if cols
288:           end
289:         end
290:       end
exec_update(sql, name, binds)

Alias for exec_delete

execute_and_free(sql, name = nil)
     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 313
313:       def execute_and_free(sql, name = nil)
314:         result = execute(sql, name)
315:         ret = yield result
316:         result.free
317:         ret
318:       end
last_inserted_id(result)
     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 292
292:       def last_inserted_id(result)
293:         @connection.insert_id
294:       end
reconnect!()
     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 192
192:       def reconnect!
193:         disconnect!
194:         clear_cache!
195:         connect
196:       end
reset!()
     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 204
204:       def reset!
205:         if @connection.respond_to?(:change_user)
206:           # See http://bugs.mysql.com/bug.php?id=33540 -- the workaround way to
207:           # reset the connection is to change the user to the same user.
208:           @connection.change_user(@config[:username], @config[:password], @config[:database])
209:           configure_connection
210:         end
211:       end
select_rows(sql, name = nil)

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

     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 215
215:       def select_rows(sql, name = nil)
216:         @connection.query_with_result = true
217:         rows = exec_without_stmt(sql, name).rows
218:         @connection.more_results && @connection.next_result    # invoking stored procedures with CLIENT_MULTI_RESULTS requires this to tidy up else connection will be dropped
219:         rows
220:       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
136:       def supports_statement_cache?
137:         true
138:       end
type_cast(value, column)

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

     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 163
163:       def type_cast(value, column)
164:         return super unless value == true || value == false
165: 
166:         value ? 1 : 0
167:       end