Various charset / collation fixes.

This commit is contained in:
Alexander M. Turek
2003-12-29 17:15:14 +00:00
parent ebf20488d8
commit f10c27765e
5 changed files with 98 additions and 52 deletions

View File

@@ -5,6 +5,14 @@ phpMyAdmin - Changelog
$Id$
$Source$
2003-12-29 Alexander M. Turek <crazysexycool@derrabus.de>
* db_details_structure.php, libraries/mysql_charsets.lib.php:
- display database collation (MySQL >= 4.1.1);
- list collations of all tables.
* tbl_properties_strcuture, tbl_properties_table_info.php:
- Changed "Charset" label to "Collation" because it fits better;
- The column collations weren't displayed with MySQL 5.0.
2003-12-28 Marc Delisle <lem9@users.sourceforge.net>
### 2.5.5 released

View File

@@ -3,14 +3,16 @@
// vim: expandtab sw=4 ts=4 sts=4:
require_once('./libraries/grab_globals.lib.php');
require_once('./libraries/common.lib.php');
require_once('./libraries/mysql_charsets.lib.php');
/**
* Prepares the tables list if the user where not redirected to this script
* because there is no table in the database ($is_info is TRUE)
*/
if (empty($is_info)) {
require_once('./libraries/grab_globals.lib.php');
require_once('./libraries/common.lib.php');
// Drops/deletes/etc. multiple tables if required
if ((!empty($submit_mult) && isset($selected_tbl))
|| isset($mult_btn)) {
@@ -37,41 +39,40 @@ if (empty($is_info)) {
// Display function
function pma_TableHeader($alternate = FALSE) {
if ($alternate) {
?>
<table border="<?php echo $GLOBALS['cfg']['Border']; ?>">
<tr>
<td></td>
<th>&nbsp;<?php echo $GLOBALS['strTable']; ?>&nbsp;</th>
<th colspan="6"><?php echo $GLOBALS['strAction']; ?></th>
<th><?php echo $GLOBALS['strRecords']; ?></th>
</tr>
<?php
} else {
?>
<table border="<?php echo $GLOBALS['cfg']['Border']; ?>">
<tr>
<td></td>
<th>&nbsp;<?php echo $GLOBALS['strTable']; ?>&nbsp;</th>
<th colspan="6"><?php echo $GLOBALS['strAction']; ?></th>
<th><?php echo $GLOBALS['strRecords']; ?></th>
<?php
if (!($GLOBALS['cfg']['PropertiesNumColumns'] > 1)) {
?>
<th><?php echo $GLOBALS['strType']; ?></th>
<?php
}
?>
<?php
if ($GLOBALS['cfg']['ShowStats']) {
echo '<th>' . $GLOBALS['strSize'] . '</th>';
echo '<th>' . $GLOBALS['strOverhead'] . '</th>';
}
echo "\n";
?>
</tr>
<?php
echo ' <table border="' . $GLOBALS['cfg']['Border'] . '">' . "\n"
. ' <tr>' . "\n"
. ' <td></td>' . "\n"
. ' <th>' . "\n"
. ' &nbsp;' . $GLOBALS['strTable'] . '&nbsp;' . "\n"
. ' </th>' . "\n"
. ' <th colspan="6">' . "\n"
. ' &nbsp;' . $GLOBALS['strAction'] . '&nbsp;' . "\n"
. ' </th>' . "\n"
. ' <th>' . "\n"
. ' &nbsp;' . $GLOBALS['strRecords'] . '&nbsp;' . "\n"
. ' </th>' . "\n";
if (!$alternate) {
if (!($GLOBALS['cfg']['PropertiesNumColumns'] > 1)) {
echo ' <th>' . "\n"
. ' &nbsp;' . $GLOBALS['strType'] . '&nbsp;' . "\n"
. ' </th>' . "\n";
if (PMA_MYSQL_INT_VERSION >= 40100) {
echo ' <th>' . "\n"
. ' &nbsp;' . $GLOBALS['strCollation'] . '&nbsp;' . "\n"
. ' </th>' . "\n";
}
}
if ($GLOBALS['cfg']['ShowStats']) {
echo ' <th>' . "\n"
. ' &nbsp;' . $GLOBALS['strSize'] . '&nbsp;' . "\n"
. ' </th>' . "\n"
. ' <th>' . "\n"
. ' &nbsp;' . $GLOBALS['strOverhead'] . '&nbsp;' . "\n"
. ' </th>' . "\n";
}
echo "\n";
}
echo ' </tr>' . "\n";
}
@@ -378,11 +379,14 @@ else {
</td>
<?php
if (!($cfg['PropertiesNumColumns'] > 1)) {
?>
<td bgcolor="<?php echo $bgcolor; ?>" nowrap="nowrap">
&nbsp;<?php echo (isset($sts_data['Type']) ? $sts_data['Type'] : '&nbsp;'); ?>&nbsp;
</td>
<?php
echo ' <td bgcolor="' . $bgcolor . '" nowrap="nowrap">' . "\n"
. ' &nbsp;' . (isset($sts_data['Type']) ? $sts_data['Type'] : '&nbsp;') . '&nbsp;' . "\n"
. ' </td>' . "\n";
if (PMA_MYSQL_INT_VERSION >= 40100) {
echo ' <td bgcolor="' . $bgcolor . '" nowrap="nowrap">' . "\n"
. ' &nbsp;' . (isset($sts_data['Collation']) ? '<dfn title="' . PMA_getCollationDescr($sts_data['Collation']) . '">' . $sts_data['Collation'] . '</dfn>' : '---') . '&nbsp;' . "\n"
. ' </td>' . "\n";
}
}
if ($cfg['ShowStats']) {
@@ -439,11 +443,15 @@ else {
</th>
<?php
if (!($cfg['PropertiesNumColumns'] > 1)) {
?>
<th align="center">
<b>--</b>
</th>
<?php
echo ' <th align="center">' . "\n"
. ' <b>--</b>' . "\n"
. ' </th>' . "\n";
if (PMA_MYSQL_INT_VERSION >= 40100) {
$db_collation = PMA_getDbCollation($db);
echo ' <th align="center">' . "\n"
. ' &nbsp;<b><dfn title="' . PMA_getCollationDescr($db_collation) . '">' . $db_collation . '</dfn></b>&nbsp;' . "\n"
. ' </th>' . "\n";
}
}
if ($cfg['ShowStats']) {

View File

@@ -224,6 +224,36 @@ if (PMA_MYSQL_INT_VERSION >= 40100){
return $descr;
}
function PMA_getDbCollation($db) {
global $dbh;
if (PMA_MYSQL_INT_VERSION >= 40101) {
// MySQL 4.1.0 does not support seperate charset settings
// for databases.
$sql_query = 'SHOW CREATE DATABASE `' . $db . '`;';
$res = PMA_mysql_query($sql_query, $dbh) or PMA_mysqlDie(PMA_mysql_error($dbh), $sql_query);
$row = PMA_mysql_fetch_row($res);
mysql_free_result($res);
$tokenized = explode(' ', $row[1]);
unset($row, $res, $sql_query);
for ($i = 1; $i + 3 < count($tokenized); $i++) {
if ($tokenized[$i] == 'DEFAULT' && $tokenized[$i + 1] == 'CHARACTER' && $tokenized[$i + 2] == 'SET') {
// We've found the character set!
if (isset($tokenized[$i + 5]) && $tokenized[$i + 4] == 'COLLATE') {
return $tokenized[$i + 5]; // We found the collation!
} else {
// We did not find the collation, so let's return the
// default collation for the charset we've found.
return $GLOBALS['mysql_default_collations'][$tokenized [$i + 3]];
}
}
}
}
return '';
}
}
?>

View File

@@ -62,7 +62,7 @@ while ($row = PMA_mysql_fetch_array($result)) {
mysql_free_result($result);
// 3. Get fields
$local_query = 'SHOW FIELDS FROM ' . PMA_backquote($table);
$local_query = 'SHOW FULL FIELDS FROM ' . PMA_backquote($table);
$fields_rs = PMA_mysql_query($local_query) or PMA_mysqlDie('', $local_query, '', $err_url_0);
$fields_cnt = mysql_num_rows($fields_rs);
@@ -73,7 +73,7 @@ $fields_cnt = mysql_num_rows($fields_rs);
*/
?>
<!-- TABLE INFORMATIONS -->
<!-- TABLE INFORMATION -->
<form method="post" action="tbl_properties_structure.php" name="fieldsForm">
<?php echo PMA_generate_common_hidden_inputs($db, $table); ?>
@@ -83,7 +83,7 @@ $fields_cnt = mysql_num_rows($fields_rs);
<td></td>
<th>&nbsp;<?php echo $strField; ?>&nbsp;</th>
<th><?php echo $strType; ?></th>
<?php echo PMA_MYSQL_INT_VERSION >= 40100 ? ' <th>' . $strCharset . '</th>' . "\n" : ''; ?>
<?php echo PMA_MYSQL_INT_VERSION >= 40100 ? ' <th>' . $strCollation . '</th>' . "\n" : ''; ?>
<th><?php echo $strAttr; ?></th>
<th><?php echo $strNull; ?></th>
<th><?php echo $strDefault; ?></th>
@@ -596,7 +596,7 @@ if ($cfg['ShowStats']) {
$bgcolor = ((++$i%2) ? $cfg['BgcolorTwo'] : $cfg['BgcolorOne']);
?>
<tr>
<td bgcolor="<?php echo $bgcolor; ?>"><?php echo $strCharset; ?></td>
<td bgcolor="<?php echo $bgcolor; ?>"><?php echo $strCollation; ?></td>
<td bgcolor="<?php echo $bgcolor; ?>" align="<?php echo $cell_align_left; ?>" nowrap="nowrap">
<?php
echo '<dfn title="' . PMA_getCollationDescr($tbl_charset) . '">' . $tbl_charset . '</dfn>';

View File

@@ -19,7 +19,7 @@ $local_query = 'SHOW TABLE STATUS LIKE \'' . PMA_sqlAddslashes($table, T
$table_info_result = PMA_mysql_query($local_query) or PMA_mysqlDie('', $local_query, '', $err_url_0);
$showtable = PMA_mysql_fetch_array($table_info_result);
$tbl_type = strtoupper($showtable['Type']);
$tbl_charset = empty($showtable['Charset']) ? '' : $showtable['Charset'];
$tbl_charset = empty($showtable['Collation']) ? '' : $showtable['Collation'];
$table_info_num_rows = (isset($showtable['Rows']) ? $showtable['Rows'] : 0);
$show_comment = (isset($showtable['Comment']) ? $showtable['Comment'] : '');
$auto_increment = (isset($showtable['Auto_increment']) ? $showtable['Auto_increment'] : '');