Navicat 部落格

在關聯式資料庫中變更欄的資料類型 2021 年 9 月 10 日,由 Robert Gravelle 撰寫

隨著時間推移,系統需求會發生變化。這可能需要建立新的資料庫、資料表和欄,以及修改現有的資料表結構。根據來源和目標資料類型以及欄中包含的資料,變更欄的資料類型可能是一項簡單的操作,也可能是一項困難的操作。本篇文章將介紹在變更欄資料類型時遇到的一些常見挑戰,以及你可以用來促進此過程的策略。

ALTER TABLE 陳述式

我們可以使用 ALTER TABLE 陳述式變更現有資料表的結構(結構描述)。它是一個資料定義語言(Data Definition Language,DDL)陳述式,就像 CREATE TABLE、DROP 函式和 GRANT 一樣。它的基本語法是:

ALTER TABLE table_to_change
    what_to_change
    (additional_arguments)

ALTER TABLE 陳述式可用於變更各種資料表內容,從變更資料表名稱到加入、刪除和修改欄。

一句陳述式,不同的語法

你可能已經注意到,在第一行之後,ALTER TABLE 陳述式的語法變得非常模糊。這是因為它因供應商而異。例如:

在 SQL Server 中

ALTER TABLE table_name
ALTER COLUMN column_name column_type;

在 PostgreSQL 中

ALTER TABLE table_name
ALTER COLUMN column_name TYPE column_definition;

在 Oracle、MySQL 和 MariaDB 中

ALTER TABLE table_name
MODIFY column_name column_type;

一個簡單的範例

有些資料庫(如 Oracle)不允許對包含資料的資料表執行 ALTER 査詢。如果執行此操作,將出現如下錯誤:

Error report:
SQL Error: ORA-01439: column to be modified must be empty to change datatype
01439. 00000 –  “column to be modified must be empty to change datatype”

但是,大多數資料庫類型都允許你變更已填入資料的資料表。

以下是 Navicat Premium 資料表設計器,顯示了一個 MySQL 資料表的欄定義:

brands_table_design (95K)

我們可以執行 ALTER TABLE 陳述式,將 name (VARCHAR) 列的容量增加至 255 個字元:

alter_name_column (27K)

將欄從 VARCHAR 轉換為 INT

看到包含數字資料的 VARCHAR 欄並不罕見。在某些情況下,將其類型變更為數字類型可能是有利的。在 Navicat 中,我們可以從下拉式清單中選擇來設定欄的類型:

brand_code_type (35K)

按一下「儲存」按鈕後將儲存變更。如果你忘記了,Navicat 將在你關閉資料表設計器時提示你儲保變更。

資料截斷錯誤

你應該盡可能避免減少欄資料類型的大小;否則,將出現資料截斷錯誤,例如:

#1265 - Data truncated for column 'name' at row 2

處理此錯誤沒有硬性的規則,但通常,你可以自己更新有問題的值,然後重新執行 ALTER TABLE 陳述式。例如,以下陳述式將所有 name 值截斷為 10 個字元:

update_brands (10K)

總結

本文概述了在變更欄資料類型方面的一些常見挑戰,以及你可以用來促進此過程的策略。

如果你對 Navicat Premium 感興趣,可以免費試用 14 天!



Rob Gravelle 居住於加拿大渥太華,是一名有 20 多年經驗的 IT 專家。過住,Rob 曾為情報相關的組織(如加拿大邊境服務局和各種商業組織)建置系統。在業餘時間,Rob 是一名出色的吉他演奏家,並擁有多張 CD和數位發行

Navicat 文章
頻道記錄
分享
部落格封存檔