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.
  • :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.

By default, the MysqlAdapter will consider all columns of type tinyint(1) as boolean. If you wish to disable this emulation (which was the default behavior in versions 0.13.1 and earlier) you can add the following line to your environment.rb file:

  ActiveRecord::ConnectionAdapters::MysqlAdapter.emulate_booleans = false
Methods
Constants
LOST_CONNECTION_ERROR_MESSAGES = [ "Server shutdown in progress", "Broken pipe", "Lost connection to MySQL server during query", "MySQL server has gone away" ]
QUOTED_FALSE = '1', '0'
Public Class methods
new(connection, logger, connection_options, config)
     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 184
184:       def initialize(connection, logger, connection_options, config)
185:         super(connection, logger)
186:         @connection_options, @config = connection_options, config
187:         @quoted_column_names, @quoted_table_names = {}, {}
188:         connect
189:       end
Public Instance methods
active?()

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

     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 265
265:       def active?
266:         if @connection.respond_to?(:stat)
267:           @connection.stat
268:         else
269:           @connection.query 'select 1'
270:         end
271: 
272:         # mysql-ruby doesn't raise an exception when stat fails.
273:         if @connection.respond_to?(:errno)
274:           @connection.errno.zero?
275:         else
276:           true
277:         end
278:       rescue Mysql::Error
279:         false
280:       end
charset()

Returns the database character set.

     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 398
398:       def charset
399:         show_variable 'character_set_database'
400:       end
collation()

Returns the database collation strategy.

     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 403
403:       def collation
404:         show_variable 'collation_database'
405:       end
create_database(name, options = {})

Create a new MySQL database with optional :charset and :collation. Charset defaults to utf8.

Example:

  create_database 'charset_test', :charset => 'latin1', :collation => 'latin1_bin'
  create_database 'matt_development'
  create_database 'matt_development', :charset => :big5
     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 381
381:       def create_database(name, options = {})
382:         if options[:collation]
383:           execute "CREATE DATABASE `#{name}` DEFAULT CHARACTER SET `#{options[:charset] || 'utf8'}` COLLATE `#{options[:collation]}`"
384:         else
385:           execute "CREATE DATABASE `#{name}` DEFAULT CHARACTER SET `#{options[:charset] || 'utf8'}`"
386:         end
387:       end
current_database()
     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 393
393:       def current_database
394:         select_value 'SELECT DATABASE() as db'
395:       end
disconnect!()
     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 287
287:       def disconnect!
288:         @connection.close rescue nil
289:       end
drop_table(table_name, options = {})
     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 413
413:       def drop_table(table_name, options = {})
414:         super(table_name, options)
415:       end
quote(value, column = nil)

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

     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 219
219:       def quote(value, column = nil)
220:         if value.kind_of?(String) && column && column.type == :binary && column.class.respond_to?(:string_to_binary)
221:           s = column.class.string_to_binary(value).unpack("H*")[0]
222:           "x'#{s}'"
223:         elsif value.kind_of?(BigDecimal)
224:           "'#{value.to_s("F")}'"
225:         else
226:           super
227:         end
228:       end
quoted_false()
     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 246
246:       def quoted_false
247:         QUOTED_FALSE
248:       end
quoted_true()
     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 242
242:       def quoted_true
243:         QUOTED_TRUE
244:       end
reconnect!()
     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 282
282:       def reconnect!
283:         disconnect!
284:         connect
285:       end
rename_table(table_name, new_name)
     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 443
443:       def rename_table(table_name, new_name)
444:         execute "RENAME TABLE #{quote_table_name(table_name)} TO #{quote_table_name(new_name)}"
445:       end
select_rows(sql, name = nil)

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

     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 294
294:       def select_rows(sql, name = nil)
295:         @connection.query_with_result = true
296:         result = execute(sql, name)
297:         rows = []
298:         result.each { |row| rows << row }
299:         result.free
300:         rows
301:       end
show_variable(name)

SHOW VARIABLES LIKE ‘name‘

     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 496
496:       def show_variable(name)
497:         variables = select_all("SHOW VARIABLES LIKE '#{name}'")
498:         variables.first['Value'] unless variables.empty?
499:       end
type_to_sql(type, limit = nil, precision = nil, scale = nil)

Maps logical Rails types to MySQL-specific data types.

     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 481
481:       def type_to_sql(type, limit = nil, precision = nil, scale = nil)
482:         return super unless type.to_s == 'integer'
483: 
484:         case limit
485:         when 1; 'tinyint'
486:         when 2; 'smallint'
487:         when 3; 'mediumint'
488:         when nil, 4, 11; 'int(11)'  # compatibility with MySQL default
489:         when 5..8; 'bigint'
490:         else raise(ActiveRecordError, "No integer type has byte size #{limit}")
491:         end
492:       end