diff --git a/lib/arel/collectors/plain_string.rb b/lib/arel/collectors/plain_string.rb
index <HASH>..<HASH> 100644
--- a/lib/arel/collectors/plain_string.rb
+++ b/lib/arel/collectors/plain_string.rb
@@ -3,7 +3,7 @@ module Arel
   module Collectors
     class PlainString
       def initialize
-        @str = String.new
+        @str = ''.dup
       end
 
       def value
diff --git a/test/collectors/test_sql_string.rb b/test/collectors/test_sql_string.rb
index <HASH>..<HASH> 100644
--- a/test/collectors/test_sql_string.rb
+++ b/test/collectors/test_sql_string.rb
@@ -33,6 +33,14 @@ module Arel
         sql = collector.compile ["hello", "world"]
         assert_equal 'SELECT FROM "users" WHERE "users"."age" = ? AND "users"."name" = ?', sql
       end
+
+      def test_returned_sql_uses_utf8_encoding
+        bv = Nodes::BindParam.new(nil)
+        collector = collect ast_with_binds bv
+
+        sql = collector.compile ["hello", "world"]
+        assert_equal sql.encoding, Encoding::UTF_8
+      end
     end
   end
 end
Ensure `ToSql` collector returns a UTF-8 string

Switching from `''.dup` to `String.new` had the side effect of changing
the encoding on Ruby <I> and later. Oddly, `String.new(encoding:
Encoding::UTF_8)` is significantly slower than `''.dup`. This seems like
a bug in Ruby, but not something we're going to address right now. A
test has been added to ensure this regression doesn't occur again.