mysql char binary,MySQL“二进制” vs“char character set binary”

What's the difference between binary(10) vs char(10)character set binary?

And varbinary(10) vs varchar(10)character set binary?

Are they synonymous in all MySQL engines?

Is there any gotcha to watch out for?

解决方案

There isn't a difference.

However, there is a caveat if you're storing a string.

If you only want to store a byte array or other binary data such as a stream or file then use the binary type as that is what they are meant for.

Quote from the MySQL manual:

The use of CHARACTER SET binary in the definition of a CHAR, VARCHAR,

or TEXT column causes the column to be treated as a binary data type.

For example, the following pairs of definitions are equivalent:

CHAR(10) CHARACTER SET binary

BINARY(10)

VARCHAR(10) CHARACTER SET binary

VARBINARY(10)

TEXT CHARACTER SET binary

BLOB

So, technically there is no difference.

However, when storing a string it must be converted from a string to byte values using a character set. The decision is to either do this yourself before the MySQL server or you leave it up to MySQL do to do for you. MySQL will perform with by casting a string to BINARY using the BIN character sets.

If you want to store the encoding in another format, lets say you have a business requirement that says you must use 4 bytes per character (MySQL doesn't do this by default) you could then use the "CHARACTER SET BINARY" to a textual column and perform the character set encoding yourself.

It is also worth reading The BINARY and VARBINARY Types from the MySQL manual as this details important information such as padding.

Summary:

There is no technical difference as one is a synonym to the other. In my opinion it makes logical sense to store binary strings in data types that would normally hold a string using the "CHARACTER SET BINARY" and to store byte arrays / streams etc in BINARY fields that cannot be represented by transforming the data though a character set.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值