這樣看來,只要將欄位定義為UTF8, MySQL會自動增大欄位長度,存放所有字串, 即是說此時不會去理該欄位所定義的長度了, 只要不超過該Field type的最大限制就可以了, 比如: MySQL的varchar,最大允許255個字元,只要輸入的中文字不超過85(255除3),不用理定義該欄位的長度,即不會出現警告信息吧~
似乎不是這樣?...
你試試看塞資料進去看看,我測試的話, 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數