Mysql

電話號碼的數據類型:VARCHAR、INT 還是 BIGINT?

  • May 8, 2017

所以這將是今年的虛擬問題,但我需要問一下,因為這不是我第一次遇到這個問題。看一下下表定義:

在此處輸入圖像描述

看看現在的列from_numberVARCHAR(45)但它將包含一個電話號碼。由於我不知道一部手機可以在全世界擁有多少個號碼,所以我試圖覆蓋幾乎所有的號碼。我想盡可能地保持數據庫的完整性,所以我認為VARCHAR不是保存此類資訊的合適類型 - 你告訴我,也許我錯了 - 所以我正在考慮更改INTBIGINT.

當我在 Workbench 中定義一個列時,我應該指定括號之間的數字,()而不是在所有情況下,但在我之前提到的那些情況下,我必須這樣做。所以如果我這樣做:BIGINT()我得到這個錯誤:

在此處輸入圖像描述

指導我在這裡閱讀一些關於這種 MySQL 類型的資訊。基本上資訊是這樣的:

一個大整數。… 無符號範圍是 0 到 18446744073709551615。

這讓我問:當我定義一個BIGINT()類型時,我應該為括號設置什麼值。(我使用 BIGINT 是因為我不知道 INT 是否可以容納與電話一樣多的數字——也許我也錯了)。在 MariaDB/MySQL 數據庫中創建|設計列的正確方法是什麼?

無論如何,我想知道您的意見,經驗,當然我想得到答案

*注意:*我正在使用 MySQL Workbench 最新版本來創建 ER 圖。我也在使用 MariaDB 10.0.x

您將如何處理帶有分機的電話號碼,例如“+1-000-000-0000 ext 1234”?

注意,“+”表示應使用國際撥號規則;所以來自北美,系統在國際電話前自動知道“011”等。

另外,諸如“1-800-DBA-HELP”之類的電話號碼呢?

我通常會將電話號碼儲存為文本。話雖如此,這實際上取決於您的電話號碼列的重要性。如果您正在從該列執行自動撥號程序,那麼您確實希望確保僅包含數字,並且數據代表格式正確的電話號碼。

您可以為分機和帶有文本的電話號碼設置單獨的列,例如我提供的“1-800-DBA-HELP”範例。

引用自:https://dba.stackexchange.com/questions/124546