2015-06-04 81 views
1

如果我存儲長度爲1000的數據,使用varchar是一個好主意嗎?以下是我的腳本和專欄SR_NOTES是我擔心的一個。我用戶utf8和引擎是INNODB。比如TINYTEXT會比較明智嗎?我熱衷於創建數據庫設計而不會影響性能。MySQL - 存儲在varchar長度爲1000

CREATE TABLE IF NOT EXISTS SROR (
SROR_ID INT UNSIGNED NOT NULL, 
CRAN_ID INT UNSIGNED NOT NULL, 
SR_TAGS VARCHAR(250) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, 
GR_VALUES DECIMAL(4,2), -- 12.25 R 
NOTICE_PERIOD SMALLINT UNSIGNED DEFAULT NULL, 
C_STATUS VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' DEFAULT 'INACTIVE', 
SR_NOTES VARCHAR(1000) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' DEFAULT NULL, 
SR_CONTROL VARCHAR(10) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' DEFAULT NULL, 
START_DATE DATETIME DEFAULT CURRENT_TIMESTAMP, 
LAST_UPDATE DATETIME ON UPDATE CURRENT_TIMESTAMP, 
PRIMARY KEY (SROR_ID, CRAN_ID), 
INDEX idx_SROR_id1 (SROR_ID ASC), 
INDEX idx_SROR_id2 (CRAN_ID ASC), 
CONSTRAINT fk_SROR_C1 
    FOREIGN KEY (CRAN_ID) 
    REFERENCES R_CONFIG (CRAN_ID) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = utf8 
COLLATE = utf8_unicode_ci; 
+1

255是一個varchar的最大字符長度。我只使用TEXT,甚至不使用小文本。除非您試圖在這些文本塊上編制索引,否則它不會妨礙數據庫的性能。 – skrilled

+0

'varchar'長度僅爲'255',所以你需要去'tynitext'。坦克 –

+2

實際上mysql中的varchar限制是'65,535'而不是'255'。要回答你的問題,實際上可以通過這個[問題](http://stackoverflow.com/questions/2023481/mysql-large-varchar-vs-text)回答 – Augwa

回答

0

考慮使用不同的數據類型,例如TEXT可以存儲多達65535個字符。存儲筆記的一個很好的選擇。

參見: What is the MySQL VARCHAR max size?

+0

我剛剛讀到,使用TEXT可以影響性能,因爲它創建臨時表,與varchar不同。如果VARCHAR和TEXT都可以存儲長度爲1000的數據,並且如果TEXT使用額外的資源,那麼爲什麼人們更喜歡TEXT到VARCHAR? – user4826347

+0

你的數據庫有多大?你在談論多少條記錄?你正確使用索引?如果你是,我敢說你不會注意到這個區別。另外,當你說性能時,你的意思是數據查找時間或最大連接數或兩者?恕我直言,當您擁有數百萬,數億或數十億條記錄,或者當您的查詢變得緩慢時,您應該開始擔心TEXT vs VARCHAR性能。然後,我不知道你的情況。如果學習是你想要的,你就走在正確的道路上。獲得經驗很好:) –

+0

我正在創建一個PHP網站。樂觀的想法,我期望流量很好。我想用這種有遠見的想法來創造解決方案。所以我正在努力關注細節。通過性能我的意思是併發和查找時間,我認爲這將構成用戶體驗。 – user4826347