MySQL "binary"与 "char character set binary"

标签 mysql debugging storage specifications column-types

binary(10) vs char(10)character set binary有什么区别?

还有varbinary(10) vs varchar(10)字符集二进制

它们在所有 MySQL 引擎中是同义词吗?

有什么需要注意的地方吗?

最佳答案

没有区别。

但是,如果您存储的是字符串,则需要注意。

如果您只想存储字节数组或其他二进制数据(例如流或文件),那么请使用二进制类型,因为这正是它们的用途。

引自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

因此,从技术上讲没有区别。

但是,在存储字符串时,必须使用字符集将其从字符串转换为字节值。决定是在 MySQL 服务器之前自己做这件事,还是让 MySQL 为你做。 MySQL 将通过使用 BIN 字符集将字符串转换为 BINARY 来执行。

如果你想以另一种格式存储编码,假设你有一个业务需求,要求每个字符必须使用 4 个字节(MySQL 默认不这样做),你可以使用 CHARACTER SET BINARY 到文本列并自己执行字符集编码。

同样值得一读The BINARY and VARBINARY Types来自 MySQL 手册,因为它详细说明了诸如填充之类的重要信息。

总结: 没有技术差异,因为一个是另一个的同义词。在我看来,将二进制字符串存储在通常使用 CHARACTER SET BINARY 保存字符串的数据类型中并将字节数组/流等存储在 BINARY 字段中是合乎逻辑的不能通过字符集转换数据来表示。

关于MySQL "binary"与 "char character set binary",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15334607/

相关文章:

windows - 本地主机嗅探器(Windows 操作系统)

android - 如何从内部存储中读取 .gif 文件?

database - AppStore 更新后 Cordova 应用程序的 localStorage 被删除

azure - 无法删除 Portal.azure.com 中的存储帐户

mysql - FreeBSD Mysql 2003 - 无法连接到 'localhost' 上的 MySQL 服务器 (10061)

mysql - 存储过程比简单查询更快/更好吗?

PHP Mysql 多次插入(大数据集)

java - 无法在 Release模式下启动 Activity(使用 proguard-android-optimize 配置)

mysql - 根据分组存储列的百分比

visual-studio-2010 - "Stop Debugging"后VS2010一直运行(Web API)