如何将 MySql 列名转换为小写以提高可读性?

Posted

技术标签:

【中文标题】如何将 MySql 列名转换为小写以提高可读性?【英文标题】:How to convert MySql column names to lowercase for better readability? 【发布时间】:2014-03-06 13:48:15 【问题描述】:

我有一个数据库,里面有十几个表,它们的大小写用法不规则。有没有一种简单的方法可以将所有 mysql-tables 中的所有列名转换为小写?也许除了以“_ID”结尾的字符串?

我知道 mysql 不区分大小写。 这是为了提高可读性。如果您在一个表中有“Author”、“AUTHOR_ID”和“AuthorName”之类的列名,则很难阅读,我喜欢使用小写字母使其更加一致。

【问题讨论】:

MySQL 没有 make column names case-sensitive,所以我不完全确定要问什么。 我知道,但为了保持一致性,我想让我的列小写以提高可读性。 这是一次性的事情,您可以重命名所有列或为查询完成 在下面阅读我的答案。我添加了问题的链接,您可以在哪里找到 sql 查询如何列出所有表、表中的所有列以及如何重命名它们。还发布了一个问题链接,它将向您展示如何处理外键。 使用column aliasing 让列显示为你想要的 【参考方案1】:

你好示例代码,你可以帮助你。

$c1 = mysql_connect("localhost","root","");// Connection




$db1 = mysql_select_db("INFORMATION_SCHEMA");



$get_column = mysql_query("SELECT * FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='data_base_name' AND `TABLE_NAME`='table_name'");

while($row = mysql_fetch_assoc($get_column))


$old_name = $row['COLUMN_NAME'];
$new_name = strtolower($row['COLUMN_NAME']);
$datatype= $row['DATA_TYPE'];
$size = $row['CHARACTER_MAXIMUM_LENGTH'];



if($row['DATA_TYPE'] !="varchar" && $row['DATA_TYPE'] !="text")
$query =  "ALTER TABLE mstusers CHANGE $old_name $new_name $datatype".";<br/>";
else

$query =  "ALTER TABLE mstusers CHANGE $old_name $new_name $datatype ($size)".";<br/>";

echo $query;




// Query paste in your  phpmyadmin

请查看此链接了解更多详情

http://myphpinformation.blogspot.in/2016/10/convert-column-name-into-lowercase-in-mysql-and-php.html

【讨论】:

停止使用mysql函数,使用mysqli 哦,我们使用 mysql 功能,我会建议。这就是为什么你给 - 评级。为什么。代码正在工作。如果您可以在您的浏览器中进行测试。【参考方案2】:

编辑: - 打开 phpMyAdmin。 -> 点击导出并将文件导出为 *.sql 文件。 -> 编辑 SQL 文件,你会发现很多创建表和此类查询 -> 在文本编辑器中编辑名称并保存。 -> 打开 phpMyAdmin 并删除所有表并导入您之前保存的 *.sql 文件并运行它,它应该可以解决问题!

否则:

不同的数据类型有不同的要求,所以你需要 UNION:

SELECT 'ALTER TABLE '||table_name||' CHANGE '|| column_name||' '||lower(column_name)||' '||datatype||'('||CHAR(character_maximum_length)||');' AS Line
    FROM information_schema.columns
    WHERE table_schema = dbname and datatype in ( 'CHAR', 'VARCHAR' )
    ORDER BY table_name
    UNION
SELECT 'ALTER TABLE '||table_name||' CHANGE '|| column_name||' '||lower(column_name)||' '||datatype||'('||CHAR(numeric_precision)||');' AS Line
    FROM information_schema.columns
    WHERE table_schema = dbname and datatype in ( 'INTEGER' )
    ORDER BY table_name
    UNION
SELECT 'ALTER TABLE '||table_name||' CHANGE '|| column_name||' '||lower(column_name)||' '||datatype||'('||CHAR(numeric_precision)||','||CHAR(numeric_scale)|');' AS Line
    FROM information_schema.columns
    WHERE table_schema = dbname and datatype in ( 'FLOAT' )
    ORDER BY table_name
    UNION
SELECT 'ALTER TABLE '||table_name||' CHANGE '|| column_name||' '||lower(column_name)||' '||datatype||');' AS Line
    FROM information_schema.columns
    WHERE table_schema = dbname and datatype in ( 'DATE' )
    ORDER BY table_name

还有:a MYSQL script to convert the column names to lowercase

【讨论】:

感谢您的好意,但这是关于更改表列名称而不是 php 中的字符串。顺便说一句,我不是在这里给分数减分的人——是别人。我很高兴每一个答案(尝试)。 对不起哈桑,它仍然是关于 MySQL 而不是 PHP。这没有帮助。 @Hexodus 我已经重写了这个,希望这就是你想要的。运行 SQL 查询。 这确实更好。但是我的表格中有 200 多列。 来自此answer 的精确副本。复制答案时,请注明出处!【参考方案3】:

这个:

$sql = mysqli_query($dbConn,"SHOW TABLES");

$tables=array();
while($table_row = mysqli_fetch_array($sql))

    $tables[]=$table_row[0];

foreach($tables as $table)
    $sql = mysqli_query($dbConn,"SHOW COLUMNS FROM ".$table);

    $query = "ALTER TABLE ".$table;
    while($column_row = mysqli_fetch_array($sql))
    
        if(substr($column_row['Field'],-3)=="_ID")
        
            $new_column = strtolower(substr($column_row['Field'],0,-3))."_ID";
        
        else
        
            $new_column = strtolower($column_row['Field']);
        
            
        $query .= " CHANGE COLUMN ". " " .$column_row['Field']." ".$new_column. " " . $column_row['Type'] . " " . (($column_row['Null']=='YES')?'NULL':'NOT NULL') . " " . (($column_row['Default']=='')?'':' DEFAULT '.$column_row['Default']) . " " . $column_row['Extra'] . ",";
        
    
    $query = rtrim($query,',');
    echo $query;
    echo "<br><br><br>";

将为您提供每个表中每个列的所有 ALTER TABLE 语句的列表。

警告:

我已通过上述查询打印屏幕上的所有 ALTER 语句,但是,是否执行由您决定。我不确定您的数据库在执行后是否会保持不变,因为它们可能无法涵盖您为每一列选择的所有可能的数据类型和条件

执行上述操作,它不会对您的数据库进行更改,并查看您的任何列是否缺少任何重要的数据类型或条件值。

【讨论】:

看起来这可能是一种方法,但我最好小心这个解决方案。这样做让我有点紧张。 大声笑,你可以做的是,使用命令SHOW CREATE TABLE &lt;table_name&gt;它将返回创建表代码(它为你提供每列的所有规范),你可以用它交叉检查是否所有每列的规范在ALTER代码中已经提到

以上是关于如何将 MySql 列名转换为小写以提高可读性?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL

mysql

mysql

MYSQL数据库

mysql规范和操作

Linux-MySQL基本命令-SQL语句