什麼是VS char(10)character set binary
binary(10)
之間的區別?MySQL的「二進制」與「字符的字符集的二進制」
而且varbinary(10)
VS varchar(10)character set binary
?
是他們的代名詞所有 MySQL的引擎?
有沒有什麼值得留意的?
什麼是VS char(10)character set binary
binary(10)
之間的區別?MySQL的「二進制」與「字符的字符集的二進制」
而且varbinary(10)
VS varchar(10)character set binary
?
是他們的代名詞所有 MySQL的引擎?
有沒有什麼值得留意的?
沒有區別。
但是,如果您要存儲字符串,則需要注意。
如果你只想一個字節數組或其他存儲二進制數據,如流或文件,然後使用二進制類型,這是他們都是爲了。從MySQL manual
引用:
在CHAR的定義中使用的字符組二進制的,VARCHAR, 或TEXT列導致要視爲二進制數據類型的列。 例如,定義下列對是相同的:
CHAR(10) CHARACTER SET binary BINARY(10) VARCHAR(10) CHARACTER SET binary VARBINARY(10) TEXT CHARACTER SET binary BLOB
因此,技術上沒有任何區別。
然而,存儲的字符串時,它必須從字符串轉換成字節使用的字符集的值。這個決定是要麼在MySQL服務器之前自己做這件事,要麼就是讓它由MySQL來爲你做。 MySQL將通過使用BIN字符集將字符串強制轉換爲BINARY來執行。
如果你想以另一種格式存儲編碼,可以說你有一個業務需求,說你必須使用每個字符4個字節(MySQL默認不這樣做),那麼你可以使用「CHARACTER SET BINARY 「轉換爲文本列並自己執行字符集編碼。
這也是值得從MySQL手冊,因爲這細節的重要信息,如填充閱讀The BINARY and VARBINARY Types。
總結: 沒有技術上的差異,因爲一個是另一個的同義詞。在我看來,將二進制字符串存儲在通常使用「CHARACTER SET BINARY」存儲字符串的數據類型中並將字節數組/流存儲在BINARY字段中是不合邏輯的,這些字段不能通過字符集轉換數據來表示。
我正在存儲字節數組。如果兩個選項都是同義詞,爲什麼你說*「使用二進制類型,因爲它是爲它設計的」*?是不是也爲字節數組設計的「字符集二進制」? – Pacerier 2013-03-11 10:39:26
@Pacerier對我來說確實是不好的措辭(我會在我的答案中更清楚地說明),charset set binary是二進制的同義詞,所以在技術上沒有區別。國際海事組織更容易理解存儲二進制流(不能用字符集和排序規則表示)在二進制中是有意義的,如果你正在做自己的字符編碼,將它存儲在字符集CHARACTER SET BINARY – Steve 2013-03-11 11:06:36
@Ic,順便說一句,你知道這種行爲是否是*官方*,還是引擎仍然允許自己執行? – Pacerier 2013-03-11 11:16:40