<?php/* $Id: mysql_charsets.lib.php,v 2.43 2006/01/17 17:02:30 cybot_tm Exp $ */// vim: expandtab sw=4 ts=4 sts=4:if (PMA_MYSQL_INT_VERSION >= 40100){$res = PMA_DBI_query('SHOW CHARACTER SET;');$mysql_charsets = array();while ($row = PMA_DBI_fetch_assoc($res)) {$mysql_charsets[] = $row['Charset'];// never used//$mysql_charsets_maxlen[$row['Charset']] = $row['Maxlen'];$mysql_charsets_descriptions[$row['Charset']] = $row['Description'];}@PMA_DBI_free_result( $res );$mysql_charsets_count = count($mysql_charsets);sort($mysql_charsets, SORT_STRING);$mysql_collations = array_flip($mysql_charsets);$mysql_default_collations = $mysql_collations_flat = $mysql_charsets_available = $mysql_collations_available = array();$res = PMA_DBI_query('SHOW COLLATION;');while ($row = PMA_DBI_fetch_assoc($res)) {if (!is_array($mysql_collations[$row['Charset']])) {$mysql_collations[$row['Charset']] = array($row['Collation']);} else {$mysql_collations[$row['Charset']][] = $row['Collation'];}$mysql_collations_flat[] = $row['Collation'];if ((isset($row['D']) && $row['D'] == 'Y') || (isset($row['Default']) && $row['Default'] == 'Yes')) {$mysql_default_collations[$row['Charset']] = $row['Collation'];}//$mysql_collations_available[$row['Collation']] = !isset($row['Compiled']) || $row['Compiled'] == 'Yes';$mysql_collations_available[$row['Collation']] = TRUE;$mysql_charsets_available[$row['Charset']] = !empty($mysql_charsets_available[$row['Charset']]) || !empty($mysql_collations_available[$row['Collation']]);}@PMA_DBI_free_result( $res );unset( $res, $row );$mysql_collations_count = count($mysql_collations_flat);sort($mysql_collations_flat, SORT_STRING);foreach ($mysql_collations AS $key => $value) {sort($mysql_collations[$key], SORT_STRING);reset($mysql_collations[$key]);}unset( $key, $value );define('PMA_CSDROPDOWN_COLLATION', 0);define('PMA_CSDROPDOWN_CHARSET', 1);function PMA_generateCharsetDropdownBox($type = PMA_CSDROPDOWN_COLLATION, $name = null, $id = null, $default = null, $label = TRUE, $indent = 0, $submitOnChange = FALSE, $displayUnavailable = FALSE) {global $mysql_charsets, $mysql_charsets_descriptions, $mysql_charsets_available, $mysql_collations, $mysql_collations_available;if (empty($name)) {if ($type == PMA_CSDROPDOWN_COLLATION) {$name = 'collation';} else {$name = 'character_set';}}$spacer = '';for ($i = 1; $i <= $indent; $i++) $spacer .= ' ';$return_str = $spacer . '<select xml:lang="en" dir="ltr" name="' . htmlspecialchars($name) . '"' . (empty($id) ? '' : ' id="' . htmlspecialchars($id) . '"') . ($submitOnChange ? ' onchange="this.form.submit();"' : '') . '>' . "\n";if ($label) {$return_str .= $spacer . ' <option value="">' . ($type == PMA_CSDROPDOWN_COLLATION ? $GLOBALS['strCollation'] : $GLOBALS['strCharset']) . '</option>' . "\n";}$return_str .= $spacer . ' <option value=""></option>' . "\n";foreach ($mysql_charsets as $current_charset) {if (!$mysql_charsets_available[$current_charset]) {continue;}$current_cs_descr = empty($mysql_charsets_descriptions[$current_charset]) ? $current_charset : $mysql_charsets_descriptions[$current_charset];if ($type == PMA_CSDROPDOWN_COLLATION) {$return_str .= $spacer . ' <optgroup label="' . $current_charset . '" title="' . $current_cs_descr . '">' . "\n";foreach ($mysql_collations[$current_charset] as $current_collation) {if (!$mysql_collations_available[$current_collation]) {continue;}$return_str .= $spacer . ' <option value="' . $current_collation . '" title="' . PMA_getCollationDescr($current_collation) . '"' . ($default == $current_collation ? ' selected="selected"' : '') . '>' . $current_collation . '</option>' . "\n";}$return_str .= $spacer . ' </optgroup>' . "\n";} else {$return_str .= $spacer . ' <option value="' . $current_charset . '" title="' . $current_cs_descr . '"' . ($default == $current_charset ? ' selected="selected"' : '') . '>' . $current_charset . '</option>' . "\n";}}$return_str .= $spacer . '</select>' . "\n";return $return_str;}function PMA_generateCharsetQueryPart($collation) {list($charset) = explode('_', $collation);return ' CHARACTER SET ' . $charset . ($charset == $collation ? '' : ' COLLATE ' . $collation);}/*** returns collation of given db** @uses PMA_MYSQL_INT_VERSION* @uses PMA_DBI_fetch_value()* @uses PMA_DBI_select_db()* @uses PMA_sqlAddSlashes()* @uses $GLOBALS['db']* @param string $db name of db* @return string collation of $db*/function PMA_getDbCollation( $db ) {if ( PMA_MYSQL_INT_VERSION >= 50000 && $db == 'information_schema' ) {// We don't have to check the collation of the virtual// information_schema database: We know it!return 'utf8_general_ci';}if ( PMA_MYSQL_INT_VERSION >= 50006 ) {// Since MySQL 5.0.6, we don't have to parse SHOW CREATE DATABASE anymore.return PMA_DBI_fetch_value('SELECT DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = \'' . PMA_sqlAddSlashes($db) . '\' LIMIT 1;');} elseif ( PMA_MYSQL_INT_VERSION >= 40101 ) {// MySQL 4.1.0 does not support seperate charset settings// for databases.PMA_DBI_select_db( $db );$return = PMA_DBI_fetch_value( 'SHOW VARIABLES LIKE "collation_database"', 0, 1 );if ( isset( $GLOBALS['db'] ) && $db !== $GLOBALS['db'] ) {PMA_DBI_select_db( $GLOBALS['db'] );}return $return;}return '';}} else {function PMA_getDbCollation( $db ) { return PMA_getServerCollation(); }}/*** returns default server collation from show variables** @uses PMA_DBI_fetch_value()* @return string $server_collation*/function PMA_getServerCollation() {return PMA_DBI_fetch_value('SHOW VARIABLES LIKE \'collation_server\'', 0, 1 );}/*** returns description for given collation** @uses is_array()* @uses explode()* @uses count()* @uses $GLOBALS['str[Languages|Sorting]']** @param string $collation MySQL collation string* @return string collation description*/function PMA_getCollationDescr( $collation ) {static $collation_cache;if (!is_array($collation_cache)) {$collation_cache = array();} elseif (isset($collation_cache[$collation])) {return $collation_cache[$collation];}if ($collation == 'binary') {return $GLOBALS['strBinary'];}$parts = explode('_', $collation);if (count($parts) == 1) {$parts[1] = 'general';} elseif ($parts[1] == 'ci' || $parts[1] == 'cs') {$parts[2] = $parts[1];$parts[1] = 'general';}$descr = '';switch ($parts[1]) {case 'bulgarian':$descr = $GLOBALS['strBulgarian'];break;case 'chinese':if ($parts[0] == 'gb2312' || $parts[0] == 'gbk') {$descr = $GLOBALS['strSimplifiedChinese'];} elseif ($parts[0] == 'big5') {$descr = $GLOBALS['strTraditionalChinese'];}break;case 'ci':$descr = $GLOBALS['strCaseInsensitive'];break;case 'cs':$descr = $GLOBALS['strCaseSensitive'];break;case 'croatian':$descr = $GLOBALS['strCroatian'];break;case 'czech':$descr = $GLOBALS['strCzech'];break;case 'danish':$descr = $GLOBALS['strDanish'];break;case 'english':$descr = $GLOBALS['strEnglish'];break;case 'esperanto':$descr = $GLOBALS['strEsperanto'];break;case 'estonian':$descr = $GLOBALS['strEstonian'];break;case 'german1':$descr = $GLOBALS['strGerman'] . ' (' . $GLOBALS['strDictionary'] . ')';break;case 'german2':$descr = $GLOBALS['strGerman'] . ' (' . $GLOBALS['strPhoneBook'] . ')';break;case 'hungarian':$descr = $GLOBALS['strHungarian'];break;case 'icelandic':$descr = $GLOBALS['strIcelandic'];break;case 'japanese':$descr = $GLOBALS['strJapanese'];break;case 'latvian':$descr = $GLOBALS['strLatvian'];break;case 'lithuanian':$descr = $GLOBALS['strLithuanian'];break;case 'korean':$descr = $GLOBALS['strKorean'];break;case 'persian':$descr = $GLOBALS['strPersian'];break;case 'polish':$descr = $GLOBALS['strPolish'];break;case 'roman':$descr = $GLOBALS['strWestEuropean'];break;case 'romanian':$descr = $GLOBALS['strRomanian'];break;case 'slovak':$descr = $GLOBALS['strSlovak'];break;case 'slovenian':$descr = $GLOBALS['strSlovenian'];break;case 'spanish':$descr = $GLOBALS['strSpanish'];break;case 'spanish2':$descr = $GLOBALS['strTraditionalSpanish'];break;case 'swedish':$descr = $GLOBALS['strSwedish'];break;case 'thai':$descr = $GLOBALS['strThai'];break;case 'turkish':$descr = $GLOBALS['strTurkish'];break;case 'ukrainian':$descr = $GLOBALS['strUkrainian'];break;case 'unicode':$descr = $GLOBALS['strUnicode'] . ' (' . $GLOBALS['strMultilingual'] . ')';break;case 'bin':$is_bin = TRUE;case 'general':switch ($parts[0]) {// Unicode charsetscase 'ucs2':case 'utf8':$descr = $GLOBALS['strUnicode'] . ' (' . $GLOBALS['strMultilingual'] . ')';break;// West European charsetscase 'ascii':case 'cp850':case 'dec8':case 'hp8':case 'latin1':case 'macroman':$descr = $GLOBALS['strWestEuropean'] . ' (' . $GLOBALS['strMultilingual'] . ')';break;// Central European charsetscase 'cp1250':case 'cp852':case 'latin2':case 'macce':$descr = $GLOBALS['strCentralEuropean'] . ' (' . $GLOBALS['strMultilingual'] . ')';break;// Russian charsetscase 'cp866':case 'koi8r':$descr = $GLOBALS['strRussian'];break;// Simplified Chinese charsetscase 'gb2312':case 'gbk':$descr = $GLOBALS['strSimplifiedChinese'];break;// Japanese charsetscase 'sjis':case 'ujis':case 'cp932':case 'eucjpms':$descr = $GLOBALS['strJapanese'];break;// Baltic charsetscase 'cp1257':case 'latin7':$descr = $GLOBALS['strBaltic'] . ' (' . $GLOBALS['strMultilingual'] . ')';break;// Othercase 'armscii8':case 'armscii':$descr = $GLOBALS['strArmenian'];break;case 'big5':$descr = $GLOBALS['strTraditionalChinese'];break;case 'cp1251':$descr = $GLOBALS['strCyrillic'] . ' (' . $GLOBALS['strMultilingual'] . ')';break;case 'cp1256':$descr = $GLOBALS['strArabic'];break;case 'euckr':$descr = $GLOBALS['strKorean'];break;case 'hebrew':$descr = $GLOBALS['strHebrew'];break;case 'geostd8':$descr = $GLOBALS['strGeorgian'];break;case 'greek':$descr = $GLOBALS['strGreek'];break;case 'keybcs2':$descr = $GLOBALS['strCzechSlovak'];break;case 'koi8u':$descr = $GLOBALS['strUkrainian'];break;case 'latin5':$descr = $GLOBALS['strTurkish'];break;case 'swe7':$descr = $GLOBALS['strSwedish'];break;case 'tis620':$descr = $GLOBALS['strThai'];break;default:$descr = $GLOBALS['strUnknown'];break;}if (!empty($is_bin)) {$descr .= ', ' . $GLOBALS['strBinary'];}break;default: $descr = $GLOBALS['strUnknown'];}if (!empty($parts[2])) {if ($parts[2] == 'ci') {$descr .= ', ' . $GLOBALS['strCaseInsensitive'];} elseif ($parts[2] == 'cs') {$descr .= ', ' . $GLOBALS['strCaseSensitive'];}}$collation_cache[$collation] = $descr;return $descr;}?>