From ed2a84f99b75ed0c2dec4a0145720ee84ab9e114 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Sat, 26 May 2007 00:20:37 +0000 Subject: MySQL: create_database takes :charset and :collation options. Charset defaults to utf8. References #8448. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6848 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- .../connection_adapters/mysql_adapter.rb | 44 +++++++++++++++++----- 1 file changed, 35 insertions(+), 9 deletions(-) (limited to 'activerecord/lib/active_record') diff --git a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb index 8617191ac5..a3d211c85c 100755 --- a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb @@ -209,7 +209,7 @@ module ActiveRecord def quoted_true "1" end - + def quoted_false "0" end @@ -238,7 +238,7 @@ module ActiveRecord disconnect! connect end - + def disconnect! @connection.close rescue nil end @@ -304,7 +304,7 @@ module ActiveRecord else sql = "SHOW TABLES" end - + select_all(sql).inject("") do |structure, table| table.delete('Table_type') structure += select_one("SHOW CREATE TABLE #{table.to_a.first.last}")["Create Table"] + ";\n\n" @@ -316,16 +316,37 @@ module ActiveRecord create_database(name) end - def create_database(name) #:nodoc: - execute "CREATE DATABASE `#{name}`" + # 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 + def create_database(name, options = {}) + if options[:collation] + execute "CREATE DATABASE `#{name}` DEFAULT CHARACTER SET `#{options[:charset] || 'utf8'}` COLLATE `#{options[:collation]}`" + else + execute "CREATE DATABASE `#{name}` DEFAULT CHARACTER SET `#{options[:charset] || 'utf8'}`" + end end - + def drop_database(name) #:nodoc: execute "DROP DATABASE IF EXISTS `#{name}`" end def current_database - select_one("SELECT DATABASE() as db")["db"] + select_value 'SELECT DATABASE() as db' + end + + # Returns the database character set. + def charset + show_variable 'character_set_database' + end + + # Returns the database collation strategy. + def collation + show_variable 'collation_database' end def tables(name = nil) #:nodoc: @@ -359,10 +380,10 @@ module ActiveRecord def create_table(name, options = {}) #:nodoc: super(name, {:options => "ENGINE=InnoDB"}.merge(options)) end - + def rename_table(name, new_name) execute "RENAME TABLE #{name} TO #{new_name}" - end + end def change_column_default(table_name, column_name, default) #:nodoc: current_type = select_one("SHOW COLUMNS FROM #{table_name} LIKE '#{column_name}'")["Type"] @@ -386,6 +407,11 @@ module ActiveRecord end + # SHOW VARIABLES LIKE 'name' + def show_variable(name) + select_value "SHOW VARIABLES LIKE '#{name}'" + end + private def connect encoding = @config[:encoding] -- cgit v1.2.3