Title: [766] trunk/activerecord-jdbc: Fix for 14601 - make MySQL multibyte handling more correct.

Diff

Modified: trunk/activerecord-jdbc/lib/active_record/connection_adapters/jdbc_adapter.rb (765 => 766)


--- trunk/activerecord-jdbc/lib/active_record/connection_adapters/jdbc_adapter.rb	2007-10-11 11:27:00 UTC (rev 765)
+++ trunk/activerecord-jdbc/lib/active_record/connection_adapters/jdbc_adapter.rb	2007-10-16 08:02:27 UTC (rev 766)
@@ -375,7 +375,7 @@
 
         if driver =~ /mysql/i
           div = url =~ /\?/ ? '&' : '?'
-          url = ""
+          url = ""
           @config[:url] = url
         end
 

Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_mysql.rb (765 => 766)


--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_mysql.rb	2007-10-11 11:27:00 UTC (rev 765)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_mysql.rb	2007-10-16 08:02:27 UTC (rev 766)
@@ -7,7 +7,7 @@
         warn "AR-JDBC MySQL on JRuby does not support sockets"
       end
       config[:port] ||= 3306
-      config[:url] ||= "jdbc:mysql://#{config[:host]}:#{config[:port]}/#{config[:database]}"
+      config[:url] ||= "jdbc:mysql://#{config[:host]}:#{config[:port]}/#{config[:database]}?zeroDateTimeBehavior=convertToNull&jdbcCompliantTruncation=false&useUnicode=true&characterEncoding=utf8"
       config[:driver] = "com.mysql.jdbc.Driver"
       jdbc_connection(config)
     end
@@ -122,7 +122,7 @@
     end
     
     def create_table(name, options = {}) #:nodoc:
-      super(name, {:options => "ENGINE=InnoDB"}.merge(options))
+      super(name, {:options => "ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin"}.merge(options))
     end
     
     def rename_table(name, new_name)

Modified: trunk/activerecord-jdbc/src/java/JDBCMySQLSpec.java (765 => 766)


--- trunk/activerecord-jdbc/src/java/JDBCMySQLSpec.java	2007-10-11 11:27:00 UTC (rev 765)
+++ trunk/activerecord-jdbc/src/java/JDBCMySQLSpec.java	2007-10-16 08:02:27 UTC (rev 766)
@@ -78,6 +78,12 @@
             bl.replace(i, 1, rep);
             i+=1;
         }
+
+        if(!replacementFound) {
+            return string;
+        }
+
+
         return recv.getRuntime().newStringShared(bl);
     }
 }

Modified: trunk/activerecord-jdbc/src/java/JdbcAdapterInternalService.java (765 => 766)


--- trunk/activerecord-jdbc/src/java/JdbcAdapterInternalService.java	2007-10-11 11:27:00 UTC (rev 765)
+++ trunk/activerecord-jdbc/src/java/JdbcAdapterInternalService.java	2007-10-16 08:02:27 UTC (rev 766)
@@ -648,6 +648,7 @@
             if(vs == null || rs.wasNull()) {
                 return runtime.getNil();
             }
+
             return RubyString.newUnicodeString(runtime, vs);
         }
     }

Added: trunk/activerecord-jdbc/test/mysql_multibyte_test.rb (0 => 766)


--- trunk/activerecord-jdbc/test/mysql_multibyte_test.rb	                        (rev 0)
+++ trunk/activerecord-jdbc/test/mysql_multibyte_test.rb	2007-10-16 08:02:27 UTC (rev 766)
@@ -0,0 +1,6 @@
+require 'jdbc_common'
+require 'db/mysql'
+
+class MySQLMultibyteTest < Test::Unit::TestCase
+  include MultibyteTestMethods
+end

Modified: trunk/activerecord-jdbc/test/simple.rb (765 => 766)


--- trunk/activerecord-jdbc/test/simple.rb	2007-10-11 11:27:00 UTC (rev 765)
+++ trunk/activerecord-jdbc/test/simple.rb	2007-10-16 08:02:27 UTC (rev 766)
@@ -147,4 +147,11 @@
     assert_equal "テスト", rs.getString(1)
     assert_equal "本文", rs.getString(2)
   end
+  
+  def test_chinese_word
+    chinese_word = '中文'
+    new_entry = Entry.create(:title => chinese_word)
+    new_entry.reload
+    assert_equal chinese_word, new_entry.title
+  end
 end
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel

Reply via email to