2 /* vim: set expandtab sw=4 ts=4 sts=4: */
4 * Shared code for mysql charsets
8 if (! defined('PHPMYADMIN')) {
13 * Generate charset dropdown box
15 * @param int $type Type
16 * @param string $name Element name
17 * @param string $id Element id
18 * @param null|string $default Default value
19 * @param bool $label Label
20 * @param bool $submitOnChange Submit on change
24 function PMA_generateCharsetDropdownBox($type = PMA_CSDROPDOWN_COLLATION
,
25 $name = null, $id = null, $default = null, $label = true,
26 $submitOnChange = false
28 global $mysql_charsets, $mysql_charsets_descriptions,
29 $mysql_charsets_available, $mysql_collations, $mysql_collations_available;
32 if ($type == PMA_CSDROPDOWN_COLLATION
) {
35 $name = 'character_set';
39 $return_str = '<select lang="en" dir="ltr" name="'
40 . htmlspecialchars($name) . '"'
41 . (empty($id) ?
'' : ' id="' . htmlspecialchars($id) . '"')
42 . ($submitOnChange ?
' class="autosubmit"' : '') . '>' . "\n";
44 $return_str .= '<option value="">'
45 . ($type == PMA_CSDROPDOWN_COLLATION ?
__('Collation') : __('Charset'))
48 $return_str .= '<option value=""></option>' . "\n";
49 foreach ($mysql_charsets as $current_charset) {
50 if (!$mysql_charsets_available[$current_charset]) {
54 = empty($mysql_charsets_descriptions[$current_charset])
56 : $mysql_charsets_descriptions[$current_charset];
58 if ($type == PMA_CSDROPDOWN_COLLATION
) {
59 $return_str .= '<optgroup label="' . $current_charset
60 . '" title="' . $current_cs_descr . '">' . "\n";
61 foreach ($mysql_collations[$current_charset] as $current_collation) {
62 if (!$mysql_collations_available[$current_collation]) {
65 $return_str .= '<option value="' . $current_collation
66 . '" title="' . PMA_getCollationDescr($current_collation) . '"'
67 . ($default == $current_collation ?
' selected="selected"' : '')
69 . $current_collation . '</option>' . "\n";
71 $return_str .= '</optgroup>' . "\n";
73 $return_str .= '<option value="' . $current_charset
74 . '" title="' . $current_cs_descr . '"'
75 . ($default == $current_charset ?
' selected="selected"' : '') . '>'
76 . $current_charset . '</option>' . "\n";
79 $return_str .= '</select>' . "\n";
85 * Generate the charset query part
87 * @param string $collation Collation
88 * @param boolean optional $override force 'CHARACTER SET' keyword
92 function PMA_generateCharsetQueryPart($collation, $override = false)
95 list($charset) = explode('_', $collation);
96 $keyword = ' CHARSET=';
99 $keyword = ' CHARACTER SET ';
101 return $keyword . $charset
102 . ($charset == $collation ?
'' : ' COLLATE ' . $collation);
104 return ' COLLATE ' . $collation;
109 * returns collation of given db
111 * @param string $db name of db
113 * @return string collation of $db
115 function PMA_getDbCollation($db)
117 if ($GLOBALS['dbi']->isSystemSchema($db)) {
118 // We don't have to check the collation of the virtual
119 // information_schema database: We know it!
120 return 'utf8_general_ci';
123 if (! $GLOBALS['cfg']['Server']['DisableIS']) {
124 // this is slow with thousands of databases
126 ?
'SELECT DEFAULT_COLLATION_NAME FROM data_dictionary.SCHEMAS'
127 . ' WHERE SCHEMA_NAME = \'' . PMA_Util
::sqlAddSlashes($db)
129 : 'SELECT DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA'
130 . ' WHERE SCHEMA_NAME = \'' . PMA_Util
::sqlAddSlashes($db)
132 return $GLOBALS['dbi']->fetchValue($sql);
134 $GLOBALS['dbi']->selectDb($db);
135 $return = $GLOBALS['dbi']->fetchValue('SELECT @@collation_database');
136 if ($db !== $GLOBALS['db']) {
137 $GLOBALS['dbi']->selectDb($GLOBALS['db']);
144 * returns default server collation from show variables
146 * @return string $server_collation
148 function PMA_getServerCollation()
150 return $GLOBALS['dbi']->fetchValue('SELECT @@collation_server');
154 * returns description for given collation
156 * @param string $collation MySQL collation string
158 * @return string collation description
160 function PMA_getCollationDescr($collation)
162 if ($collation == 'binary') {
165 $parts = explode('_', $collation);
166 if (count($parts) == 1) {
167 $parts[1] = 'general';
168 } elseif ($parts[1] == 'ci' ||
$parts[1] == 'cs') {
169 $parts[2] = $parts[1];
170 $parts[1] = 'general';
175 $descr = __('Bulgarian');
178 if ($parts[0] == 'gb2312' ||
$parts[0] == 'gbk') {
179 $descr = __('Simplified Chinese');
180 } elseif ($parts[0] == 'big5') {
181 $descr = __('Traditional Chinese');
185 $descr = __('case-insensitive');
188 $descr = __('case-sensitive');
191 $descr = __('Croatian');
194 $descr = __('Czech');
197 $descr = __('Danish');
200 $descr = __('English');
203 $descr = __('Esperanto');
206 $descr = __('Estonian');
209 $descr = __('German') . ' (' . __('dictionary') . ')';
212 $descr = __('German') . ' (' . __('phone book') . ')';
215 $descr = __('Hungarian');
218 $descr = __('Icelandic');
221 $descr = __('Japanese');
224 $descr = __('Latvian');
227 $descr = __('Lithuanian');
230 $descr = __('Korean');
233 $descr = __('Persian');
236 $descr = __('Polish');
239 $descr = __('West European');
242 $descr = __('Romanian');
245 $descr = __('Sinhalese');
248 $descr = __('Slovak');
251 $descr = __('Slovenian');
254 $descr = __('Spanish');
257 $descr = __('Traditional Spanish');
260 $descr = __('Swedish');
266 $descr = __('Turkish');
269 $descr = __('Ukrainian');
272 $descr = __('Unicode') . ' (' . __('multilingual') . ')';
275 $descr = __('Vietnamese');
277 /** @noinspection PhpMissingBreakStatementInspection */
280 // no break; statement here, continuing with 'general' section:
287 $descr = __('Unicode') . ' (' . __('multilingual') . ')';
289 // West European charsets
296 $descr = __('West European') . ' (' . __('multilingual') . ')';
298 // Central European charsets
303 $descr = __('Central European') . ' (' . __('multilingual') . ')';
308 $descr = __('Russian');
310 // Simplified Chinese charsets
313 $descr = __('Simplified Chinese');
320 $descr = __('Japanese');
325 $descr = __('Baltic') . ' (' . __('multilingual') . ')';
330 $descr = __('Armenian');
333 $descr = __('Traditional Chinese');
336 $descr = __('Cyrillic') . ' (' . __('multilingual') . ')';
339 $descr = __('Arabic');
342 $descr = __('Korean');
345 $descr = __('Hebrew');
348 $descr = __('Georgian');
351 $descr = __('Greek');
354 $descr = __('Czech-Slovak');
357 $descr = __('Ukrainian');
360 $descr = __('Turkish');
363 $descr = __('Swedish');
369 $descr = __('unknown');
372 if (!empty($is_bin)) {
373 $descr .= ', ' . __('Binary');
376 default: $descr = __('unknown');
378 if (!empty($parts[2])) {
379 if ($parts[2] == 'ci') {
380 $descr .= ', ' . __('case-insensitive');
381 } elseif ($parts[2] == 'cs') {
382 $descr .= ', ' . __('case-sensitive');