2011-11-25 171 views
0

我不知道是什麼類型(組,整數,時間,CHAR,VARCHAR,文本,...)我應該使用這些數據:我應該在MySQL中使用哪些類型的數據?

  • IP
  • 個人信息
  • 數據和時間
  • 標題
  • 名(或姓)
  • 用戶代理
  • 論壇答案(或意見)
  • 電子郵件地址
  • 國家
  • 密碼
  • 自定義會話cookie
+0

什麼是對downvoting的原因是什麼?有時如果我們的程序員更經常問這類問題,我會很高興。 – AndreKR

回答

1

這還挺有趣的問題,但我會回答IP地址。

您可以將IP地址存儲在INT UNSIGNED中。

mysql> SELECT INET_ATON('192.168.0.10') AS ipn; 

mysql> SELECT INET_NTOA(3232235530) AS ipa; 

因此,您可以在一個INT UNSIGNED(4字節)中存儲IP地址,這當然比CHAR(15)更高效和更快。

+0

如果您的標題最大限度地節省空間,是的。另一方面,在客戶端軟件中查看並不實際,甚至範圍查找可能會更慢。 – AndreKR

+0

客戶端應通過函數INET_NTOA()進行選擇,並查看正確的輸出IP。範圍查找速度更快,爲什麼它會更慢?例如:如果您從哪個國家搜索IP,這是最佳解決方案。 http://www.ip2location.com/擁有INT值的數據庫。 –

+1

沒有我知道的客戶端(例如,phpMyAdmin,MySQL Workbench,Navicat,HeidiSQL)可以在查看錶格時執行此操作。對於慢速查找,我想到的東西像'WHERE INET_NTOA(col)LIKE「192.168。%。255」',現在我明白了,我沒有說清楚。 – AndreKR

4

這取決於你的個人品味/你的公司的規範一點,但我會用:

  • IP: CHAR(15)
  • 個人信息: TEXT
  • 日期和時間: DATETIME
  • 標題: VARCHAR(255)
  • 名(或姓): VARCHAR(255)
  • 的user-agent: VARCHAR(255)
  • 論壇答案(或意見): TEXT
  • 電子郵件地址: VARCHAR( 255)
  • 國家: CHAR(2)
  • 密碼: VARCHAR(255)
  • 自定義會話cookie: VARCHAR(255)
+0

爲什麼沒有BLOB? phpBB在一些地方使用BLOB。 – ilhan

+0

因爲您列出的所有情況都是人類可讀的文字,將受益於字符集轉換。這是BLOB和TEXT之間的區別:TEXT將從客戶端的連接字符集轉換而來。 – AndreKR

+0

密碼至少應該是MD5()編碼,因此是CHAR(32)。 –

相關問題