[英]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.