簡體   English   中英

SQL:將所有列轉換為 VarChar(255)

[英]SQL: convert all columns to VarChar(255)

在 stackoverflow 和網絡上進行了一些搜索后,我找不到我的問題的答案。 我不是真正的 SQL 人才,但我正在嘗試將表中的所有列轉換為 varchar (255)。 它有大約 600 列都是 varchar,但大小限制各不相同。 我希望它們都是 255。有沒有辦法不必手動執行此操作? 我使用 MySQL。

謝謝!

這不是你真正需要做的。 你有更重要的事情要做:規范你的數據庫

現在,您不可能擁有一個包含 600 列的規范化表。 正確拆分該表中的實體,至少遵循第三范式規則。 之后,您將擁有一個更好的數據庫,更易於維護。

為此,您需要刪除當前表,因此,您不需要將所有類型更改為 varchar(255),因為您將在創建其他表期間修復它們。

這將是一個好的開始閱讀: http : //en.wikipedia.org/wiki/Database_normalization (感謝@Tim Schmelter 來自問題的評論)

您需要通過從數據庫中提取數據來生成 alter table 語句。

select 'alter table MyTableName modify column ' + column_name + ' varchar(255);'
from information_schema where table_name = 'MyTableName'

然后將此命令的結果粘貼到查詢窗口中並運行它——確保它執行您希望它執行的操作。 先做好備份。

或者您可以通過用逗號替換分號來制作一個大的alter 語句(如果MySql 不會被它阻塞)。

首先,正如其他人所提到的,您最好將數據標准化

同時,您可以像這樣使用動態 SQL 實現您的目標

DELIMITER $$
CREATE PROCEDURE change_to_varchar255(IN _tname VARCHAR(64))
BEGIN
  SET @sql = NULL;

  SELECT GROUP_CONCAT( 
           CONCAT_WS(' ', 'CHANGE', COLUMN_NAME, COLUMN_NAME, 'VARCHAR(255)'))
    INTO @sql
    FROM INFORMATION_SCHEMA.COLUMNS
   WHERE TABLE_NAME = _tname
     AND DATA_TYPE = 'varchar'
     AND CHARACTER_MAXIMUM_LENGTH < 255
     AND TABLE_SCHEMA = SCHEMA();

  SET @sql = CONCAT_WS(' ', 'ALTER TABLE', _tname, @sql);

  PREPARE stmt FROM @sql;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;

示例用法:

CALL change_to_varchar255('table1');

這是SQLFiddle演示

如果您使用的是 PhpMyAdmin 或其他,您也可以點擊按鈕來修改表格。

當您在網頁上時,在 Windows 下按Ctrl+Shift+J或在 Mac 下按Cmd+Opt+J以打開 Chrome 開發人員工具中的控制台窗口。 現在輸入以下命令將所有出現的數字 255 替換為 100 :

document.body.innerHTML = document.body.innerHTML.replace(/255/g, "100")

最后,單擊按鈕執行查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM