MySQL 4.1 以後每個欄位若是 varchar or char 一樣還是只能存 255 個字,但是這跟 MySQL 4.0 的 255 意義可是大大的不同!

請看一下這篇:http://phorum.study-area.org/viewtopic.php?p=202666#202666

重點在於,MySQL 4.1 以上,varchar跟 char 判斷的這個欄位可以放多少個字,而不是多少個字元(byte)。

所以就算是中文字(欄位使用 UTF8 儲存),一樣可以塞 255 個中文字進去,而不再是之前的 255 / 3 or big5 的 255 / 2 囉!

你試試看塞資料進去看看,我測試的話, mysql 5.0 , varchar 255 , 可以塞入 255 個中文字, 或是 255 個英文字母...

或許應該是說 varchar or char 都是以字為單為,一個字母或是一個中文字。
在 utf8 中 一個 "1" 跟 一個"一" ,同樣都代表一個字,只是所用來對應用的 byte 長度是不一樣的...一個是 1 byte 一個是用 3 byte 去對應.

你可以在 test 資料庫中測試下面的資料..
代碼:

CREATE TABLE `test` (
  `test` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- 列出以下資料庫的數據: `test`
--

INSERT INTO `test` (`test`) VALUES ('123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345');
INSERT INTO `test` (`test`) VALUES ('一二三四五六七八九零一二三四五六七八九零一二三四五六七八九零一二三四五六七八九零一二三四五六七八九零一二三四五六七八九零一二三四五六七八九零 一二三四五六七八九零一二三四五六七八九零一二三四五六七八九零一二三四五六七八九零一二三四五六七八九零一二三四五六七八九零一二三四五六七八九零一二 三四五六七八九零一二三四五六七八九零一二三四五六七八九零一二三四五六七八九零一二三四五六七八九零一二三四五六七八九零一二三四五六七八九零一二三四 五六七八九零一二三四五六七八九零一二三四五六七八九零一二三四五六七八九零一二三四五');
INSERT INTO `test` (`test`) VALUES ('1234567890');
INSERT INTO `test` (`test`) VALUES ('一二三四五六七八九零');
INSERT INTO `test` (`test`) VALUES ('1二3四5六7八9零');



然後執行語法:
代碼:
SELECT test,length(test),CHAR_LENGTH(test) FROM `test`


你就會發現,MySQL除了字元長度以外,也算字數,而 varchar , char 算的是字數,不是佔用的byte數
創作者介紹
創作者 kevin0523 的頭像
kevin0523

新‧夢想

kevin0523 發表在 痞客邦 留言(0) 人氣()