Python中Mysql的BINARY数据类型适用于什么场合?

我从未使用过
Python中Mysql的BINARY数据类型适用于什么场合?

10 回复

存文件


BINARY 类型主要用在需要精确字节匹配的场合。

最常见的情况是存储哈希值(比如 MD5、SHA1)或加密数据
因为像 CHAR/VARCHAR 这类字符串类型在比较时会忽略尾随空格,并且可能受字符集影响,而 BINARYVARBINARY 直接按原始字节比较,确保二进制数据的精确性。

示例:

import mysql.connector
import hashlib

# 连接数据库
conn = mysql.connector.connect(
    host="localhost",
    user="your_user",
    password="your_password",
    database="test_db"
)
cursor = conn.cursor()

# 创建表,使用 BINARY 存储 MD5(固定 16 字节)
cursor.execute("""
    CREATE TABLE IF NOT EXISTS user_hashes (
        id INT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50),
        password_hash BINARY(16)  -- MD5 结果固定 16 字节
    )
""")

# 插入数据:将 MD5 哈希值作为二进制存入
md5_hash = hashlib.md5(b"my_password").digest()  # 返回 bytes 对象
cursor.execute(
    "INSERT INTO user_hashes (username, password_hash) VALUES (%s, %s)",
    ("alice", md5_hash)
)

# 查询时精确匹配二进制数据
cursor.execute(
    "SELECT * FROM user_hashes WHERE password_hash = %s",
    (md5_hash,)
)
print(cursor.fetchall())

conn.commit()
cursor.close()
conn.close()

简单说就是:需要严格按字节比较时就用 BINARY。

从未用过+1

知名论坛系统 vbulletin 最开始就是用 MySQL 放论坛的附件的,十五年过去了,现在数据库还是可选的附件存储方式。

以前的网站里头像是这么存的,原因可能是以前空间贵,数据库太闲置了

文件,二进制数据流。

用过 BINARY 存储用户头像。不过现在都流行用 S3 之类的云存储服务了。

前东家的在线阅读,每页书的内容用压缩二进制存。

存加密后的二进制数据,比如加密的密码。
存小文件。( BLOB )

binary 存 uuid 的二进制形式

回到顶部