MySQL用于存儲身份證號時必須考慮到其長度。身份證號碼是中國公民的唯一標識,它由18位數字和一個校驗碼組成。因此,身份證號的長度必須為18。
CREATE TABLE `personal_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `id_number` varchar(18) NOT NULL, `address` varchar(200) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
在MySQL中,可以使用VARCHAR(18)
來定義身份證號的數據類型。在創建表時需要注意,不能將長度設置為小于18或大于18的任何值。否則,MySQL就無法正常插入身份證號數據。
同時,應該防止插入無效的身份證號。MySQL 8.0以上版本可以使用正則表達式來檢查身份證號的格式是否正確:
INSERT INTO `personal_info` (`name`, `id_number`, `address`) VALUES ('張三', '11010119800101001X', '北京市東城區東華門街道xxx號'), ('李四', '123456789012345678', '上海市金山區xxx號'), ('王五', '31010119800101001X', '浙江省杭州市xxx號'); SELECT * FROM `personal_info` WHERE `id_number` REGEXP '^[1-9]\\d{5}(19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\\d|3[0-1])\\d{3}[\\dX]$';
需要注意的是,上面的正則表達式只能檢查身份證號的格式是否正確,不能判斷其是否真實存在。如果需要判斷身份證號是否真實存在,可以調用第三方接口進行驗證。