File tree Expand file tree Collapse file tree 2 files changed +22
-3
lines changed Expand file tree Collapse file tree 2 files changed +22
-3
lines changed Original file line number Diff line number Diff line change @@ -17,6 +17,12 @@ def initialize(msg, server_version=nil)
17
17
super ( clean_message ( msg ) )
18
18
end
19
19
20
+ if "" . respond_to? :encode
21
+ def sql_state = ( state )
22
+ @sql_state = state . encode
23
+ end
24
+ end
25
+
20
26
private
21
27
22
28
# In MySQL 5.5+ error messages are always constructed server-side as UTF-8
@@ -50,10 +56,10 @@ def clean_message(message)
50
56
return message if !message . respond_to? ( :encoding )
51
57
52
58
if @server_version && @server_version > 50500
53
- message
59
+ message . encode
54
60
else
55
61
if message . respond_to? :scrub
56
- message . scrub
62
+ message . scrub . encode
57
63
else
58
64
# This is ugly as hell but Ruby 1.9 doesn't provide a way to clean a string
59
65
# and retain it's valid UTF-8 characters, that I know of.
@@ -66,7 +72,7 @@ def clean_message(message)
66
72
new_message << REPLACEMENT_CHAR
67
73
end
68
74
end
69
- new_message
75
+ new_message . encode
70
76
end
71
77
end
72
78
end
Original file line number Diff line number Diff line change 67
67
error . sql_state . encoding . should eql ( Encoding ::US_ASCII )
68
68
error . sql_state . valid_encoding?
69
69
end
70
+
71
+ it "returns error messages and sql state in Encoding.default_internal if set" do
72
+ interal_before = Encoding . default_internal
73
+ Encoding . default_internal = 'UTF-16'
74
+
75
+ error . message . encoding . should eql ( Encoding . default_internal )
76
+ error . message . valid_encoding?
77
+
78
+ bad_err . message . encoding . should eql ( Encoding . default_internal )
79
+ bad_err . message . valid_encoding?
80
+
81
+ Encoding . default_internal = interal_before
82
+ end
70
83
end
71
84
end
You can’t perform that action at this time.
0 commit comments