之前写过个旧版本的PhpMyAdmin如何隐藏不需要字符储的博文,字符集太多,而我根本都用不到。
我用到的也就是gbk,utf8,utf8mb4
其它的都让他隐藏吧,否则我要改个字段选择字符集都让我头大。
版本:4.8.5
版本:5.7.28
修改文件:libraries/classes/Charsets.php
line 84行前,增加:if(!in_array($name,array('gbk','utf8','utf8mb4'))) continue;
下面代码段的第20行
private static function loadCharsets(DatabaseInterface $dbi, $disableIs)
{
/* Data already loaded */
if (count(self::$_charsets) > 0) {
return;
}
if ($disableIs) {
$sql = 'SHOW CHARACTER SET';
} else {
$sql = 'SELECT `CHARACTER_SET_NAME` AS `Charset`,'
. ' `DESCRIPTION` AS `Description`'
. ' FROM `information_schema`.`CHARACTER_SETS`';
}
$res = $dbi->query($sql);
self::$_charsets = array();
while ($row = $dbi->fetchAssoc($res)) {
$name = $row['Charset'];
if(!in_array($name,array('gbk','utf8','utf8mb4'))) continue; //注意这里
self::$_charsets[] = $name;
self::$_charsets_descriptions[$name] = $row['Description'];
}
$dbi->freeResult($res);
sort(self::$_charsets, SORT_STRING);
}
line 120 左右,增加一个判断,如下函数:
下面代码段的第22行
private static function loadCollations(DatabaseInterface $dbi, $disableIs)
{
/* Data already loaded */
if (count(self::$_collations) > 0) {
return;
}
if ($disableIs) {
$sql = 'SHOW COLLATION';
} else {
$sql = 'SELECT `CHARACTER_SET_NAME` AS `Charset`,'
. ' `COLLATION_NAME` AS `Collation`, `IS_DEFAULT` AS `Default`'
. ' FROM `information_schema`.`COLLATIONS`';
}
$res = $dbi->query($sql);
//print_r($res);exit();
while ($row = $dbi->fetchAssoc($res)) {
$char_set_name = $row['Charset'];
$name = $row['Collation'];
//注意下面这一句
if(!in_array($name,array('utf8_general_ci','gbk_chinese_ci','utf8mb4_general_ci'))) continue;
self::$_collations[$char_set_name][] = $name;
if ($row['Default'] == 'Yes' || $row['Default'] == '1') {
self::$_default_collations[$char_set_name] = $name;
}
}
$dbi->freeResult($res);
foreach (self::$_collations as $key => $value) {
sort(self::$_collations[$key], SORT_STRING);
}
}
代码里有注意提示的那一句,第一个函数是大类,utf8,gbk之类的,第二个函数是小类。根据自己的需要判断处理就可以了。留个笔记。