Python中Mysql的BINARY数据类型适用于什么场合?
我从未使用过
Python中Mysql的BINARY数据类型适用于什么场合?
10 回复
存文件
BINARY 类型主要用在需要精确字节匹配的场合。
最常见的情况是存储哈希值(比如 MD5、SHA1)或加密数据。
因为像 CHAR/VARCHAR 这类字符串类型在比较时会忽略尾随空格,并且可能受字符集影响,而 BINARY 和 VARBINARY 直接按原始字节比较,确保二进制数据的精确性。
示例:
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 的二进制形式

