嘗試建立名稱類似「15909434_user」的表時,會遇到錯誤「Table或列名不能以數字開頭。
根據 PostgreSQL 文檔,資料庫中的物件名稱遵循“名稱類型”,這要求它們以字母或下劃線開頭,並由字母數字字元和其後為下劃線。
為了規避此限制,可以使用雙引號將表名括起來,將其轉換為「帶引號的識別碼」。但是,需要注意的是,雙引號不被視為名稱的一部分,並且不計入 63 個字元的限制。
此約定背後的原因源自於原始 SQL 標準。標準中的「標識符開始」區塊指定標識符必須主要以簡單的拉丁字母開頭。此規則簡化了 SQL 解釋器的解析過程。
對於 SELECT-list 子句,它允許簡單的列名和數字表達式,強制執行此約定有助於解析器區分兩者。例如,如果允許表名和列名以數字開頭,則「2e2」可以解釋為列名和有效的數字表達式。
透過標識符以字母開頭的規則,解析器可以快速辨別「2e2」是一個數值表達式,「3.4」是一個數值,而不是表名或列名。
雖然設計一個允許數字前導字元的方案如果有可能,它可能會導致更模糊的規則和更複雜的語法。目前的約定為該問題提供了清晰直接的解決方案,確保高效解析並避免潛在的歧義。
以上是為什麼資料庫表或列名稱不能以數字開頭?的詳細內容。更多資訊請關注PHP中文網其他相關文章!