MySQL中的char類型通常用于存儲定長的字符串。對于一些特殊的字符串,例如一些編號,往往需要在前面補0,以達(dá)到一定的位數(shù)。但是在數(shù)據(jù)存儲與查詢過程中,前面補0的信息可能會被丟失。那么如何保留char類型前面補0的信息呢?
CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code` char(10) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如上所示,創(chuàng)建了一個表test,其中有一個字符類型的字段code,長度為10,假設(shè)要將"000123"插入到該字段中。
INSERT INTO `test` (`code`) VALUES('000123');
此時在數(shù)據(jù)庫中,該字段顯示結(jié)果為"123",前面的0被忽略了。如果在查詢時需要顯示該字段前面的0,可以使用cast()將其轉(zhuǎn)換為char類型。
SELECT id, cast(code as char) as code FROM test;
使用cast()函數(shù)后,查詢結(jié)果會將該字段前面的0同時顯示出來。
關(guān)于保留char類型字段前面0的問題,還有一個更簡單的解決方式。在創(chuàng)建表時,可以將該字段的collate設(shè)置成binary。
CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code` char(10) COLLATE binary NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如上所示,在創(chuàng)建表時,將該字段的collate設(shè)置成binary。這樣在插入數(shù)據(jù)時,前面補0的信息也會被存儲在數(shù)據(jù)庫中,并在查詢時顯示。
以上兩種方法都可以保留char類型前面補0的信息,具體使用哪種方式需要根據(jù)具體的需求進(jìn)行選擇。