病人基本信息字段类型应为:patient_id用BIGINT UNSIGNED AUTO_INCREMENT,name用VARCHAR(50) COLLATE utf8mb4_unicode_ci,id_card和phone均用VARCHAR,检验报告用MEDIUMTEXT并独立建表,时间字段统一用DATETIME,敏感字段须用MySQL原生AES加解密存入VARBINARY。

病人基本信息该用什么字段类型存
医院系统里 patient_id 必须是主键,推荐用 BIGINT UNSIGNED AUTO_INCREMENT,别用 INT——三甲医院十年积累的病人轻松超千万,INT 最大值 2147483647,撞上限后插入直接失败,错误信息是 ERROR 1062 (23000): Duplicate entry '2147483647' for key 'PRIMARY'。
name 用 VARCHAR(50) 足够(含少数民族姓名、港澳台繁体),但必须加 COLLATE utf8mb4_unicode_ci,否则“喆”“煊”等字入库变问号;id_card 别用 INT 或 BIGINT 存身份证号——会丢前导零、自动转科学计数法,必须定义为 VARCHAR(18);phone 同理用 VARCHAR(15),预留国际区号和分机位。
如何存检验报告这类变长文本
检验单、病理描述、医生手写电子病历这些内容长度不可控,不能硬塞进 VARCHAR(1000)。超过 65535 字节就超出 TEXT 上限,得用 MEDIUMTEXT(最大 16MB)。
实际建表时注意两点:
- 别把报告原文和结构化字段(如
report_date、lab_code)混在一张表里,应拆成patient_reports独立表,用patient_id外键关联 -
MEDIUMTEXT字段不参与索引,如果常按“报告中是否含‘肿瘤’二字”查询,得额外加FULLTEXT索引,且查询必须用MATCH ... AGAINST,不能用LIKE '%肿瘤%'——后者会全表扫描,万级报告时响应超 5 秒
时间字段为什么必须用 DATETIME 而不是 TIMESTAMP
医院排班、手术记录、用药时间都要求精确到秒,且需跨时区保留原始录入时间(比如国际医疗队在非洲录入的记录,回国内不能自动转成北京时间)。
TIMESTAMP 会被 MySQL 自动转成 UTC 存储、读取时再转回系统时区,导致历史数据时间漂移;DATETIME 是纯字面值存储,无时区转换。建表时统一用:
Metafox 是一个企业内容管理系统,使用一个特别的模板系统,你可通过一些特定的设计和代码来轻松创建 Web 网站,内容存储在 SQL 关系数据库,通过 Web 进行管理,简单、快速而且高效。 Metafox 0.9.1 发布,该版本改用一种更棒的 URL 风格,实现了 RSS 源(可包含远端网站内容到 Metafox 段中),重定向老的访问密钥到新的密钥,增加 RotateAntispam 技
CREATE TABLE patient_visits ( id BIGINT PRIMARY KEY, patient_id BIGINT NOT NULL, visit_time DATETIME NOT NULL, -- 不加 DEFAULT CURRENT_TIMESTAMP created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
注意:别给业务时间字段(如 visit_time)设 DEFAULT CURRENT_TIMESTAMP,否则补录历史门诊记录时会误填成当前时间。
敏感字段加密不能只靠应用层
身份证号、手机号、诊断结论这些属于《个人信息保护法》明确定义的敏感个人信息,仅在 Java/Python 代码里 AES 加密再存进 VARCHAR 是高危操作——DBA 直接查表、备份文件泄露、慢查询日志落盘都会暴露明文。
必须启用 MySQL 原生加密:
- 用
AES_ENCRYPT()+AES_DECRYPT()函数,在 SQL 层完成加解密,密钥由 KMS 托管,不硬编码在 SQL 里 - 字段类型改用
VARBINARY(255)存密文(AES-256 输出固定 32 字节,但 base64 编码后约 44 字节,留余量) - 禁止对加密字段建索引——
AES_ENCRYPT('123', 'key')和AES_ENCRYPT('1234', 'key')完全不同,无法范围查询
真正难的是密钥轮换:旧密钥加密的数据要批量重加密,期间系统得兼容双密钥解密逻辑,这个环节最容易出数据不一致。









