@@ -126,14 +126,21 @@ static VALUE rb_raise_mysql2_error(mysql_client_wrapper *wrapper) {
126
126
VALUE rb_sql_state = rb_tainted_str_new2 (mysql_sqlstate (wrapper -> client ));
127
127
VALUE e ;
128
128
#ifdef HAVE_RUBY_ENCODING_H
129
- rb_encoding * default_internal_enc = rb_default_internal_encoding ();
130
- rb_encoding * conn_enc = rb_to_encoding (wrapper -> encoding );
131
-
132
- rb_enc_associate (rb_error_msg , conn_enc );
133
- rb_enc_associate (rb_sql_state , conn_enc );
134
- if (default_internal_enc ) {
135
- rb_error_msg = rb_str_export_to_enc (rb_error_msg , default_internal_enc );
136
- rb_sql_state = rb_str_export_to_enc (rb_sql_state , default_internal_enc );
129
+ if (wrapper -> server_version < 50500 ) {
130
+ /* MySQL < 5.5 uses mixed encoding, just call it binary. */
131
+ int err_enc = rb_ascii8bit_encindex ();
132
+ rb_enc_associate_index (rb_error_msg , err_enc );
133
+ rb_enc_associate_index (rb_sql_state , err_enc );
134
+ } else {
135
+ /* MySQL >= 5.5 uses UTF-8 errors internally and converts them to the connection encoding. */
136
+ rb_encoding * default_internal_enc = rb_default_internal_encoding ();
137
+ rb_encoding * conn_enc = rb_to_encoding (wrapper -> encoding );
138
+ rb_enc_associate (rb_error_msg , conn_enc );
139
+ rb_enc_associate (rb_sql_state , conn_enc );
140
+ if (default_internal_enc ) {
141
+ rb_error_msg = rb_str_export_to_enc (rb_error_msg , default_internal_enc );
142
+ rb_sql_state = rb_str_export_to_enc (rb_sql_state , default_internal_enc );
143
+ }
137
144
}
138
145
#endif
139
146
@@ -219,6 +226,7 @@ static VALUE allocate(VALUE klass) {
219
226
obj = Data_Make_Struct (klass , mysql_client_wrapper , rb_mysql_client_mark , rb_mysql_client_free , wrapper );
220
227
wrapper -> encoding = Qnil ;
221
228
wrapper -> active_thread = Qnil ;
229
+ wrapper -> server_version = 0 ;
222
230
wrapper -> reconnect_enabled = 0 ;
223
231
wrapper -> connected = 0 ; /* means that a database connection is open */
224
232
wrapper -> initialized = 0 ; /* means that that the wrapper is initialized */
@@ -311,6 +319,7 @@ static VALUE rb_connect(VALUE self, VALUE user, VALUE pass, VALUE host, VALUE po
311
319
return rb_raise_mysql2_error (wrapper );
312
320
}
313
321
322
+ wrapper -> server_version = mysql_get_server_version (wrapper -> client );
314
323
wrapper -> connected = 1 ;
315
324
return self ;
316
325
}
0 commit comments