Files @ 3be168914a12
Branch filter:

Location: DistRen/htdocs/sql/libraries/mysql_charsets.lib.php - annotation

ethanzonca
Added web interface fileshg commit -h
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
3be168914a12
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
 *
 * @version $Id: mysql_charsets.lib.php 11335 2008-06-21 14:01:54Z lem9 $
 */
if (! defined('PHPMYADMIN')) {
    exit;
}

/**
 *
 */
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="">&nbsp;</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);
            // the query does not work if this string is in double quotes
            // and MySQL is running in ANSI mode
            $return = PMA_DBI_fetch_value('SHOW VARIABLES LIKE \'collation_database\'', 0, 1);
            if ($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 charsets
                case 'ucs2':
                case 'utf8':
                    $descr = $GLOBALS['strUnicode'] . ' (' . $GLOBALS['strMultilingual'] . ')';
                    break;
                // West European charsets
                case 'ascii':
                case 'cp850':
                case 'dec8':
                case 'hp8':
                case 'latin1':
                case 'macroman':
                    $descr = $GLOBALS['strWestEuropean'] . ' (' . $GLOBALS['strMultilingual'] . ')';
                    break;
                // Central European charsets
                case 'cp1250':
                case 'cp852':
                case 'latin2':
                case 'macce':
                    $descr = $GLOBALS['strCentralEuropean'] . ' (' . $GLOBALS['strMultilingual'] . ')';
                    break;
                // Russian charsets
                case 'cp866':
                case 'koi8r':
                    $descr = $GLOBALS['strRussian'];
                    break;
                // Simplified Chinese charsets
                case 'gb2312':
                case 'gbk':
                    $descr = $GLOBALS['strSimplifiedChinese'];
                    break;
                // Japanese charsets
                case 'sjis':
                case 'ujis':
                case 'cp932':
                case 'eucjpms':
                    $descr = $GLOBALS['strJapanese'];
                    break;
                // Baltic charsets
                case 'cp1257':
                case 'latin7':
                    $descr = $GLOBALS['strBaltic'] . ' (' . $GLOBALS['strMultilingual'] . ')';
                    break;
                // Other
                case '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;
}
?>