mysql2 0.5.2 → 0.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +145 -44
- data/ext/mysql2/client.c +236 -58
- data/ext/mysql2/client.h +9 -2
- data/ext/mysql2/extconf.rb +62 -7
- data/ext/mysql2/mysql2_ext.c +6 -1
- data/ext/mysql2/mysql2_ext.h +13 -0
- data/ext/mysql2/mysql_enc_name_to_ruby.h +60 -55
- data/ext/mysql2/mysql_enc_to_ruby.h +71 -5
- data/ext/mysql2/result.c +287 -22
- data/ext/mysql2/result.h +1 -0
- data/ext/mysql2/statement.c +63 -14
- data/lib/mysql2/client.rb +24 -3
- data/lib/mysql2/error.rb +4 -3
- data/lib/mysql2/statement.rb +1 -3
- data/lib/mysql2/version.rb +1 -1
- data/lib/mysql2.rb +8 -3
- data/support/3A79BD29.asc +49 -0
- data/support/5072E1F5.asc +5 -5
- data/support/C74CD1D8.asc +104 -0
- data/support/mysql_enc_to_ruby.rb +7 -1
- data/support/ruby_enc_to_mysql.rb +3 -0
- metadata +15 -59
- data/examples/eventmachine.rb +0 -19
- data/examples/threaded.rb +0 -16
- data/spec/configuration.yml.example +0 -11
- data/spec/em/em_spec.rb +0 -135
- data/spec/my.cnf.example +0 -9
- data/spec/mysql2/client_spec.rb +0 -1072
- data/spec/mysql2/error_spec.rb +0 -78
- data/spec/mysql2/result_spec.rb +0 -485
- data/spec/mysql2/statement_spec.rb +0 -712
- data/spec/rcov.opts +0 -3
- data/spec/spec_helper.rb +0 -112
- data/spec/ssl/ca-cert.pem +0 -17
- data/spec/ssl/ca-key.pem +0 -27
- data/spec/ssl/ca.cnf +0 -22
- data/spec/ssl/cert.cnf +0 -22
- data/spec/ssl/client-cert.pem +0 -17
- data/spec/ssl/client-key.pem +0 -27
- data/spec/ssl/client-req.pem +0 -15
- data/spec/ssl/gen_certs.sh +0 -48
- data/spec/ssl/pkcs8-client-key.pem +0 -28
- data/spec/ssl/pkcs8-server-key.pem +0 -28
- data/spec/ssl/server-cert.pem +0 -17
- data/spec/ssl/server-key.pem +0 -27
- data/spec/ssl/server-req.pem +0 -15
- data/spec/test_data +0 -1
data/ext/mysql2/extconf.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
require 'mkmf'
|
2
2
|
require 'English'
|
3
3
|
|
4
|
+
### Some helper functions
|
5
|
+
|
4
6
|
def asplode(lib)
|
5
7
|
if RUBY_PLATFORM =~ /mingw|mswin/
|
6
8
|
abort "-----\n#{lib} is missing. Check your installation of MySQL or Connector/C, and try again.\n-----"
|
7
9
|
elsif RUBY_PLATFORM =~ /darwin/
|
8
10
|
abort "-----\n#{lib} is missing. You may need to 'brew install mysql' or 'port install mysql', and try again.\n-----"
|
9
11
|
else
|
10
|
-
abort "-----\n#{lib} is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', and try again.\n-----"
|
12
|
+
abort "-----\n#{lib} is missing. You may need to 'sudo apt-get install libmariadb-dev', 'sudo apt-get install libmysqlclient-dev' or 'sudo yum install mysql-devel', and try again.\n-----"
|
11
13
|
end
|
12
14
|
end
|
13
15
|
|
@@ -15,19 +17,57 @@ def add_ssl_defines(header)
|
|
15
17
|
all_modes_found = %w[SSL_MODE_DISABLED SSL_MODE_PREFERRED SSL_MODE_REQUIRED SSL_MODE_VERIFY_CA SSL_MODE_VERIFY_IDENTITY].inject(true) do |m, ssl_mode|
|
16
18
|
m && have_const(ssl_mode, header)
|
17
19
|
end
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
if all_modes_found
|
21
|
+
$CFLAGS << ' -DFULL_SSL_MODE_SUPPORT'
|
22
|
+
else
|
23
|
+
# if we only have ssl toggle (--ssl,--disable-ssl) from 5.7.3 to 5.7.10
|
24
|
+
# and the verify server cert option. This is also the case for MariaDB.
|
25
|
+
has_verify_support = have_const('MYSQL_OPT_SSL_VERIFY_SERVER_CERT', header)
|
26
|
+
has_enforce_support = have_const('MYSQL_OPT_SSL_ENFORCE', header)
|
27
|
+
$CFLAGS << ' -DNO_SSL_MODE_SUPPORT' if !has_verify_support && !has_enforce_support
|
28
|
+
end
|
22
29
|
end
|
23
30
|
|
31
|
+
### Check for Ruby C extention interfaces
|
32
|
+
|
24
33
|
# 2.1+
|
25
34
|
have_func('rb_absint_size')
|
26
35
|
have_func('rb_absint_singlebit_p')
|
27
36
|
|
37
|
+
# 2.7+
|
38
|
+
have_func('rb_gc_mark_movable')
|
39
|
+
|
28
40
|
# Missing in RBX (https://github.com/rubinius/rubinius/issues/3771)
|
29
41
|
have_func('rb_wait_for_single_fd')
|
30
42
|
|
43
|
+
# 3.0+
|
44
|
+
have_func('rb_enc_interned_str', 'ruby.h')
|
45
|
+
|
46
|
+
### Find OpenSSL library
|
47
|
+
|
48
|
+
# User-specified OpenSSL if explicitly specified
|
49
|
+
if with_config('openssl-dir')
|
50
|
+
_, lib = dir_config('openssl')
|
51
|
+
if lib
|
52
|
+
# Ruby versions below 2.0 on Unix and below 2.1 on Windows
|
53
|
+
# do not properly search for lib directories, and must be corrected:
|
54
|
+
# https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/39717
|
55
|
+
unless lib && lib[-3, 3] == 'lib'
|
56
|
+
@libdir_basename = 'lib'
|
57
|
+
_, lib = dir_config('openssl')
|
58
|
+
end
|
59
|
+
abort "-----\nCannot find library dir(s) #{lib}\n-----" unless lib && lib.split(File::PATH_SEPARATOR).any? { |dir| File.directory?(dir) }
|
60
|
+
warn "-----\nUsing --with-openssl-dir=#{File.dirname lib}\n-----"
|
61
|
+
$LDFLAGS << " -L#{lib}"
|
62
|
+
end
|
63
|
+
# Homebrew OpenSSL on MacOS
|
64
|
+
elsif RUBY_PLATFORM =~ /darwin/ && system('command -v brew')
|
65
|
+
openssl_location = `brew --prefix openssl`.strip
|
66
|
+
$LDFLAGS << " -L#{openssl_location}/lib" if openssl_location
|
67
|
+
end
|
68
|
+
|
69
|
+
### Find MySQL client library
|
70
|
+
|
31
71
|
# borrowed from mysqlplus
|
32
72
|
# http://github.com/oldmoe/mysqlplus/blob/master/ext/extconf.rb
|
33
73
|
dirs = ENV.fetch('PATH').split(File::PATH_SEPARATOR) + %w[
|
@@ -35,6 +75,7 @@ dirs = ENV.fetch('PATH').split(File::PATH_SEPARATOR) + %w[
|
|
35
75
|
/opt/local
|
36
76
|
/opt/local/mysql
|
37
77
|
/opt/local/lib/mysql5*
|
78
|
+
/opt/homebrew/opt/mysql*
|
38
79
|
/usr
|
39
80
|
/usr/mysql
|
40
81
|
/usr/local
|
@@ -42,6 +83,9 @@ dirs = ENV.fetch('PATH').split(File::PATH_SEPARATOR) + %w[
|
|
42
83
|
/usr/local/mysql-*
|
43
84
|
/usr/local/lib/mysql5*
|
44
85
|
/usr/local/opt/mysql5*
|
86
|
+
/usr/local/opt/mysql@*
|
87
|
+
/usr/local/opt/mysql-client
|
88
|
+
/usr/local/opt/mysql-client@*
|
45
89
|
].map { |dir| dir << '/bin' }
|
46
90
|
|
47
91
|
# For those without HOMEBREW_ROOT in PATH
|
@@ -108,6 +152,7 @@ have_struct_member('MYSQL', 'net.vio', mysql_h)
|
|
108
152
|
have_struct_member('MYSQL', 'net.pvio', mysql_h)
|
109
153
|
|
110
154
|
# These constants are actually enums, so they cannot be detected by #ifdef in C code.
|
155
|
+
have_const('MYSQL_DEFAULT_AUTH', mysql_h)
|
111
156
|
have_const('MYSQL_ENABLE_CLEARTEXT_PLUGIN', mysql_h)
|
112
157
|
have_const('SERVER_QUERY_NO_GOOD_INDEX_USED', mysql_h)
|
113
158
|
have_const('SERVER_QUERY_NO_INDEX_USED', mysql_h)
|
@@ -119,10 +164,16 @@ have_const('MYSQL_OPTION_MULTI_STATEMENTS_OFF', mysql_h)
|
|
119
164
|
# to retain compatibility with the typedef in earlier MySQLs.
|
120
165
|
have_type('my_bool', mysql_h)
|
121
166
|
|
167
|
+
# detect mysql functions
|
168
|
+
have_func('mysql_ssl_set', mysql_h)
|
169
|
+
|
170
|
+
### Compiler flags to help catch errors
|
171
|
+
|
122
172
|
# This is our wishlist. We use whichever flags work on the host.
|
123
173
|
# -Wall and -Wextra are included by default.
|
124
174
|
wishlist = [
|
125
175
|
'-Weverything',
|
176
|
+
'-Wno-compound-token-split-by-macro', # Fixed in Ruby 2.7+ at https://bugs.ruby-lang.org/issues/17865
|
126
177
|
'-Wno-bad-function-cast', # rb_thread_call_without_gvl returns void * that we cast to VALUE
|
127
178
|
'-Wno-conditional-uninitialized', # false positive in client.c
|
128
179
|
'-Wno-covered-switch-default', # result.c -- enum_field_types (when fully covered, e.g. mysql 5.5)
|
@@ -147,8 +198,10 @@ end
|
|
147
198
|
|
148
199
|
$CFLAGS << ' ' << usable_flags.join(' ')
|
149
200
|
|
201
|
+
### Sanitizers to help with debugging -- many are available on both Clang/LLVM and GCC
|
202
|
+
|
150
203
|
enabled_sanitizers = disabled_sanitizers = []
|
151
|
-
# Specify a
|
204
|
+
# Specify a comma-separated list of sanitizers, or try them all by default
|
152
205
|
sanitizers = with_config('sanitize')
|
153
206
|
case sanitizers
|
154
207
|
when true
|
@@ -164,7 +217,7 @@ when String
|
|
164
217
|
end
|
165
218
|
end
|
166
219
|
|
167
|
-
unless disabled_sanitizers.empty?
|
220
|
+
unless disabled_sanitizers.empty? # rubocop:disable Style/IfUnlessModifier
|
168
221
|
abort "-----\nCould not enable requested sanitizers: #{disabled_sanitizers.join(',')}\n-----"
|
169
222
|
end
|
170
223
|
|
@@ -181,6 +234,8 @@ unless enabled_sanitizers.empty?
|
|
181
234
|
$CFLAGS << ' -g -fno-omit-frame-pointer'
|
182
235
|
end
|
183
236
|
|
237
|
+
### Find MySQL Client on Windows, set RPATH to find the library at runtime
|
238
|
+
|
184
239
|
if RUBY_PLATFORM =~ /mswin|mingw/ && !defined?(RubyInstaller)
|
185
240
|
# Build libmysql.a interface link library
|
186
241
|
require 'rake'
|
data/ext/mysql2/mysql2_ext.c
CHANGED
@@ -4,9 +4,14 @@ VALUE mMysql2, cMysql2Error, cMysql2TimeoutError;
|
|
4
4
|
|
5
5
|
/* Ruby Extension initializer */
|
6
6
|
void Init_mysql2() {
|
7
|
-
mMysql2
|
7
|
+
mMysql2 = rb_define_module("Mysql2");
|
8
|
+
rb_global_variable(&mMysql2);
|
9
|
+
|
8
10
|
cMysql2Error = rb_const_get(mMysql2, rb_intern("Error"));
|
11
|
+
rb_global_variable(&cMysql2Error);
|
12
|
+
|
9
13
|
cMysql2TimeoutError = rb_const_get(cMysql2Error, rb_intern("TimeoutError"));
|
14
|
+
rb_global_variable(&cMysql2TimeoutError);
|
10
15
|
|
11
16
|
init_mysql2_client();
|
12
17
|
init_mysql2_result();
|
data/ext/mysql2/mysql2_ext.h
CHANGED
@@ -36,6 +36,19 @@ void Init_mysql2(void);
|
|
36
36
|
typedef bool my_bool;
|
37
37
|
#endif
|
38
38
|
|
39
|
+
// ruby 2.7+
|
40
|
+
#ifdef HAVE_RB_GC_MARK_MOVABLE
|
41
|
+
#define rb_mysql2_gc_location(ptr) ptr = rb_gc_location(ptr)
|
42
|
+
#else
|
43
|
+
#define rb_gc_mark_movable(ptr) rb_gc_mark(ptr)
|
44
|
+
#define rb_mysql2_gc_location(ptr)
|
45
|
+
#endif
|
46
|
+
|
47
|
+
// ruby 2.2+
|
48
|
+
#ifdef TypedData_Make_Struct
|
49
|
+
#define NEW_TYPEDDATA_WRAPPER 1
|
50
|
+
#endif
|
51
|
+
|
39
52
|
#include <client.h>
|
40
53
|
#include <statement.h>
|
41
54
|
#include <result.h>
|
@@ -30,7 +30,7 @@ error "gperf generated tables don't work with this execution character set. Plea
|
|
30
30
|
#endif
|
31
31
|
|
32
32
|
struct mysql2_mysql_enc_name_to_rb_map { const char *name; const char *rb_name; };
|
33
|
-
/* maximum key range =
|
33
|
+
/* maximum key range = 71, duplicates = 0 */
|
34
34
|
|
35
35
|
#ifdef __GNUC__
|
36
36
|
__inline
|
@@ -46,32 +46,32 @@ mysql2_mysql_enc_name_to_rb_hash (str, len)
|
|
46
46
|
{
|
47
47
|
static const unsigned char asso_values[] =
|
48
48
|
{
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
0,
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
10, 0,
|
60
|
-
0,
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
49
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
50
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
51
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
52
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
53
|
+
74, 74, 74, 74, 74, 74, 74, 74, 15, 5,
|
54
|
+
0, 30, 5, 25, 40, 10, 20, 50, 74, 74,
|
55
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
56
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
57
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
58
|
+
74, 74, 74, 74, 74, 74, 74, 40, 5, 0,
|
59
|
+
15, 10, 0, 0, 0, 5, 74, 0, 25, 5,
|
60
|
+
0, 5, 74, 74, 20, 5, 5, 0, 74, 45,
|
61
|
+
74, 0, 74, 74, 74, 74, 74, 74, 74, 74,
|
62
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
63
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
64
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
65
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
66
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
67
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
68
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
69
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
70
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
71
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
72
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
73
|
+
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
74
|
+
74, 74, 74, 74, 74, 74
|
75
75
|
};
|
76
76
|
return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]] + asso_values[(unsigned char)str[len - 1]];
|
77
77
|
}
|
@@ -89,11 +89,11 @@ mysql2_mysql_enc_name_to_rb (str, len)
|
|
89
89
|
{
|
90
90
|
enum
|
91
91
|
{
|
92
|
-
TOTAL_KEYWORDS =
|
92
|
+
TOTAL_KEYWORDS = 42,
|
93
93
|
MIN_WORD_LENGTH = 3,
|
94
94
|
MAX_WORD_LENGTH = 8,
|
95
95
|
MIN_HASH_VALUE = 3,
|
96
|
-
MAX_HASH_VALUE =
|
96
|
+
MAX_HASH_VALUE = 73
|
97
97
|
};
|
98
98
|
|
99
99
|
static const struct mysql2_mysql_enc_name_to_rb_map wordlist[] =
|
@@ -101,54 +101,59 @@ mysql2_mysql_enc_name_to_rb (str, len)
|
|
101
101
|
{""}, {""}, {""},
|
102
102
|
{"gbk", "GBK"},
|
103
103
|
{""},
|
104
|
-
{"
|
104
|
+
{"utf32", "UTF-32"},
|
105
105
|
{"gb2312", "GB2312"},
|
106
106
|
{"keybcs2", NULL},
|
107
107
|
{""},
|
108
108
|
{"ucs2", "UTF-16BE"},
|
109
109
|
{"koi8u", "KOI8-R"},
|
110
110
|
{"binary", "ASCII-8BIT"},
|
111
|
-
{"
|
112
|
-
{""},
|
111
|
+
{"utf8mb4", "UTF-8"},
|
112
|
+
{"macroman", "macRoman"},
|
113
113
|
{"ujis", "eucJP-ms"},
|
114
|
-
{"
|
114
|
+
{"greek", "ISO-8859-7"},
|
115
115
|
{"cp1251", "Windows-1251"},
|
116
|
-
{"
|
116
|
+
{"utf16le", "UTF-16LE"},
|
117
117
|
{""},
|
118
118
|
{"sjis", "Shift_JIS"},
|
119
119
|
{"macce", "macCentEuro"},
|
120
|
+
{"cp1257", "Windows-1257"},
|
121
|
+
{"eucjpms", "eucJP-ms"},
|
122
|
+
{""},
|
123
|
+
{"utf8", "UTF-8"},
|
124
|
+
{"cp852", "CP852"},
|
125
|
+
{"cp1250", "Windows-1250"},
|
126
|
+
{"gb18030", "GB18030"},
|
127
|
+
{""},
|
128
|
+
{"swe7", NULL},
|
129
|
+
{"koi8r", "KOI8-R"},
|
130
|
+
{"tis620", "TIS-620"},
|
131
|
+
{"geostd8", NULL},
|
132
|
+
{""},
|
133
|
+
{"big5", "Big5"},
|
134
|
+
{"euckr", "EUC-KR"},
|
120
135
|
{"latin2", "ISO-8859-2"},
|
136
|
+
{"utf8mb3", "UTF-8"},
|
121
137
|
{""},
|
122
|
-
{"macroman", "macRoman"},
|
123
138
|
{"dec8", NULL},
|
124
|
-
{"
|
139
|
+
{"cp850", "CP850"},
|
125
140
|
{"latin1", "ISO-8859-1"},
|
126
|
-
{"
|
141
|
+
{""},
|
127
142
|
{"hp8", NULL},
|
128
|
-
{"
|
129
|
-
{"
|
130
|
-
{"cp1257", "Windows-1257"},
|
131
|
-
{""}, {""},
|
132
|
-
{"utf8", "UTF-8"},
|
133
|
-
{"koi8r", "KOI8-R"},
|
134
|
-
{"cp1256", "Windows-1256"},
|
135
|
-
{""}, {""}, {""},
|
136
|
-
{"cp866", "IBM866"},
|
143
|
+
{""},
|
144
|
+
{"utf16", "UTF-16"},
|
137
145
|
{"latin7", "ISO-8859-13"},
|
138
146
|
{""}, {""}, {""},
|
139
147
|
{"ascii", "US-ASCII"},
|
140
|
-
{"
|
141
|
-
{""}, {""},
|
142
|
-
{"big5", "Big5"},
|
143
|
-
{"utf16", "UTF-16"},
|
144
|
-
{"cp1250", "Windows-1250"},
|
145
|
-
{""}, {""}, {""},
|
146
|
-
{"cp850", "CP850"},
|
147
|
-
{"tis620", "TIS-620"},
|
148
|
+
{"cp1256", "Windows-1256"},
|
148
149
|
{""}, {""}, {""},
|
149
150
|
{"cp932", "Windows-31J"},
|
151
|
+
{"hebrew", "ISO-8859-8"},
|
152
|
+
{""}, {""}, {""}, {""},
|
150
153
|
{"latin5", "ISO-8859-9"},
|
151
|
-
{""}, {""}, {""},
|
154
|
+
{""}, {""}, {""},
|
155
|
+
{"cp866", "IBM866"},
|
156
|
+
{""}, {""}, {""}, {""}, {""}, {""}, {""},
|
152
157
|
{"armscii8", NULL}
|
153
158
|
};
|
154
159
|
|
@@ -54,13 +54,13 @@ static const char *mysql2_mysql_enc_to_rb[] = {
|
|
54
54
|
"macRoman",
|
55
55
|
"UTF-16",
|
56
56
|
"UTF-16",
|
57
|
-
"",
|
57
|
+
"UTF-16LE",
|
58
58
|
"Windows-1256",
|
59
59
|
"Windows-1257",
|
60
60
|
"Windows-1257",
|
61
61
|
"UTF-32",
|
62
62
|
"UTF-32",
|
63
|
-
"",
|
63
|
+
"UTF-16LE",
|
64
64
|
"ASCII-8BIT",
|
65
65
|
NULL,
|
66
66
|
"US-ASCII",
|
@@ -74,7 +74,7 @@ static const char *mysql2_mysql_enc_to_rb[] = {
|
|
74
74
|
NULL,
|
75
75
|
"KOI8-R",
|
76
76
|
"KOI8-R",
|
77
|
-
|
77
|
+
"UTF-8",
|
78
78
|
"ISO-8859-2",
|
79
79
|
"ISO-8859-9",
|
80
80
|
"ISO-8859-13",
|
@@ -246,14 +246,80 @@ static const char *mysql2_mysql_enc_to_rb[] = {
|
|
246
246
|
"UTF-8",
|
247
247
|
"UTF-8",
|
248
248
|
"UTF-8",
|
249
|
+
"GB18030",
|
250
|
+
"GB18030",
|
251
|
+
"GB18030",
|
249
252
|
NULL,
|
250
253
|
NULL,
|
251
254
|
NULL,
|
252
255
|
NULL,
|
256
|
+
"UTF-8",
|
257
|
+
"UTF-8",
|
258
|
+
"UTF-8",
|
259
|
+
"UTF-8",
|
260
|
+
"UTF-8",
|
261
|
+
"UTF-8",
|
262
|
+
"UTF-8",
|
263
|
+
"UTF-8",
|
264
|
+
"UTF-8",
|
265
|
+
"UTF-8",
|
266
|
+
"UTF-8",
|
267
|
+
"UTF-8",
|
268
|
+
"UTF-8",
|
269
|
+
"UTF-8",
|
270
|
+
"UTF-8",
|
271
|
+
"UTF-8",
|
272
|
+
"UTF-8",
|
253
273
|
NULL,
|
274
|
+
"UTF-8",
|
275
|
+
"UTF-8",
|
276
|
+
"UTF-8",
|
254
277
|
NULL,
|
278
|
+
"UTF-8",
|
279
|
+
"UTF-8",
|
280
|
+
"UTF-8",
|
281
|
+
"UTF-8",
|
282
|
+
"UTF-8",
|
283
|
+
"UTF-8",
|
284
|
+
"UTF-8",
|
285
|
+
"UTF-8",
|
286
|
+
"UTF-8",
|
287
|
+
"UTF-8",
|
288
|
+
"UTF-8",
|
289
|
+
"UTF-8",
|
290
|
+
"UTF-8",
|
291
|
+
"UTF-8",
|
292
|
+
"UTF-8",
|
293
|
+
"UTF-8",
|
294
|
+
"UTF-8",
|
295
|
+
"UTF-8",
|
255
296
|
NULL,
|
297
|
+
"UTF-8",
|
298
|
+
"UTF-8",
|
299
|
+
"UTF-8",
|
300
|
+
NULL,
|
301
|
+
"UTF-8",
|
302
|
+
NULL,
|
303
|
+
NULL,
|
304
|
+
"UTF-8",
|
305
|
+
"UTF-8",
|
306
|
+
"UTF-8",
|
307
|
+
"UTF-8",
|
308
|
+
"UTF-8",
|
309
|
+
"UTF-8",
|
310
|
+
"UTF-8",
|
311
|
+
"UTF-8",
|
312
|
+
"UTF-8",
|
313
|
+
"UTF-8",
|
314
|
+
"UTF-8",
|
315
|
+
"UTF-8",
|
316
|
+
"UTF-8",
|
317
|
+
"UTF-8",
|
318
|
+
"UTF-8",
|
319
|
+
"UTF-8",
|
320
|
+
"UTF-8",
|
321
|
+
"UTF-8",
|
322
|
+
"UTF-8",
|
323
|
+
"UTF-8",
|
256
324
|
"UTF-8"
|
257
325
|
};
|
258
|
-
|
259
|
-
#define CHARSETNR_SIZE (sizeof(mysql2_mysql_enc_to_rb)/sizeof(mysql2_mysql_enc_to_rb[0]))
|