[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Ftype":3,"knowledge-related-\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Ftype":966,"knowledge-series-\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Ftype":993},{"source":4,"connector":5,"page":6},"sqlite","better-sqlite3",{"path":7,"title":8,"description":9,"category":10,"tags":11,"date":14,"pinned":15,"draft":15,"body":16,"seo":962,"stem":963,"id":964,"extension":965},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Ftype","数据类型","MySQL 支持多种数据类型，可分为数值、字符串、日期时间、枚举\u002F集合以及 JSON 等。选择合适的类型可以优化存储空间和查询性能。","技能小册",[12,13],"mysql","type","2024-10-16",false,{"type":17,"value":18,"toc":951},"minimark",[19,22,27,30,35,194,199,238,242,372,377,407,424,428,525,529,568,573,614,618,623,629,638,641,645,652,661,664,668,671,691,694,698,770,774,903,906,909,947],[20,21,8],"h1",{"id":8},[23,24,26],"h2",{"id":25},"mysql-数据类型详解","MySQL 数据类型详解",[28,29,9],"p",{},[31,32,34],"h3",{"id":33},"一数值类型","一、数值类型",[36,37,38,60],"table",{},[39,40,41],"thead",{},[42,43,44,48,51,54,57],"tr",{},[45,46,47],"th",{},"类型",[45,49,50],{},"字节数",[45,52,53],{},"有符号范围",[45,55,56],{},"无符号范围",[45,58,59],{},"说明",[61,62,63,84,103,122,141,159,177],"tbody",{},[42,64,65,72,75,78,81],{},[66,67,68],"td",{},[69,70,71],"strong",{},"TINYINT",[66,73,74],{},"1",[66,76,77],{},"-128 ~ 127",[66,79,80],{},"0 ~ 255",[66,82,83],{},"很小的整数（如性别、状态标志）",[42,85,86,91,94,97,100],{},[66,87,88],{},[69,89,90],{},"SMALLINT",[66,92,93],{},"2",[66,95,96],{},"-32768 ~ 32767",[66,98,99],{},"0 ~ 65535",[66,101,102],{},"较小整数（如年龄、评分）",[42,104,105,110,113,116,119],{},[66,106,107],{},[69,108,109],{},"INT \u002F INTEGER",[66,111,112],{},"4",[66,114,115],{},"-2^31 ~ 2^31-1（约 -21亿 ~ 21亿）",[66,117,118],{},"0 ~ 2^32-1",[66,120,121],{},"常用整数（如 ID、数量）",[42,123,124,129,132,135,138],{},[66,125,126],{},[69,127,128],{},"BIGINT",[66,130,131],{},"8",[66,133,134],{},"-2^63 ~ 2^63-1",[66,136,137],{},"0 ~ 2^64-1",[66,139,140],{},"极大整数（如大型系统主键、时间戳）",[42,142,143,148,151,154,156],{},[66,144,145],{},[69,146,147],{},"DECIMAL(M, D)",[66,149,150],{},"变长",[66,152,153],{},"取决于 M, D",[66,155,153],{},[66,157,158],{},"精确小数，用于金融、会计等需要精确保留的场景",[42,160,161,166,168,171,174],{},[66,162,163],{},[69,164,165],{},"FLOAT",[66,167,112],{},[66,169,170],{},"±1.175E-38 ~ ±3.402E+38",[66,172,173],{},"同上",[66,175,176],{},"单精度浮点数，近似值",[42,178,179,184,186,189,191],{},[66,180,181],{},[69,182,183],{},"DOUBLE",[66,185,131],{},[66,187,188],{},"±2.225E-308 ~ ±1.798E+308",[66,190,173],{},[66,192,193],{},"双精度浮点数，近似值（精度比 FLOAT 高）",[28,195,196,198],{},[69,197,59],{},"：",[200,201,202,220,231],"ul",{},[203,204,205,198,207,211,212,215,216,219],"li",{},[69,206,147],{},[208,209,210],"code",{},"M"," 表示总位数（精度），",[208,213,214],{},"D"," 表示小数位数。例如 ",[208,217,218],{},"DECIMAL(10, 2)"," 可存储最大 99999999.99。",[203,221,222,223,226,227,230],{},"对于货币金额，",[69,224,225],{},"永远不要使用 FLOAT\u002FDOUBLE","，因为存在精度丢失。应使用 ",[208,228,229],{},"DECIMAL"," 或以“分”为单位存储整数。",[203,232,233,234,237],{},"使用 ",[208,235,236],{},"UNSIGNED"," 属性可使字段只存储非负数，取值范围扩大一倍。",[31,239,241],{"id":240},"二字符串类型","二、字符串类型",[36,243,244,255],{},[39,245,246],{},[42,247,248,250,253],{},[45,249,47],{},[45,251,252],{},"最大长度",[45,254,59],{},[61,256,257,270,283,296,309,322,335,348,360],{},[42,258,259,264,267],{},[66,260,261],{},[69,262,263],{},"CHAR(N)",[66,265,266],{},"0 ~ 255 字符",[66,268,269],{},"固定长度，不足部分用空格填充。适合长度固定的短字符串（如国家代码、MD5 哈希）。",[42,271,272,277,280],{},[66,273,274],{},[69,275,276],{},"VARCHAR(N)",[66,278,279],{},"0 ~ 65535 字符（实际受行大小限制）",[66,281,282],{},"可变长度，额外使用 1~2 字节存储长度。适合长度可变的字符串（如用户名、标题）。",[42,284,285,290,293],{},[66,286,287],{},[69,288,289],{},"TINYTEXT",[66,291,292],{},"255 字符",[66,294,295],{},"短文本块",[42,297,298,303,306],{},[66,299,300],{},[69,301,302],{},"TEXT",[66,304,305],{},"65535 字符（约 64KB）",[66,307,308],{},"较长的文本（如文章正文、评论）",[42,310,311,316,319],{},[66,312,313],{},[69,314,315],{},"MEDIUMTEXT",[66,317,318],{},"16MB",[66,320,321],{},"较长文本（如书籍章节目录）",[42,323,324,329,332],{},[66,325,326],{},[69,327,328],{},"LONGTEXT",[66,330,331],{},"4GB",[66,333,334],{},"极大文本",[42,336,337,342,345],{},[66,338,339],{},[69,340,341],{},"BLOB",[66,343,344],{},"65535 字节",[66,346,347],{},"二进制大对象（存储图片、文件等）",[42,349,350,355,357],{},[66,351,352],{},[69,353,354],{},"MEDIUMBLOB",[66,356,318],{},[66,358,359],{},"较大二进制数据",[42,361,362,367,369],{},[66,363,364],{},[69,365,366],{},"LONGBLOB",[66,368,331],{},[66,370,371],{},"极大二进制数据",[28,373,374,198],{},[69,375,376],{},"选择建议",[200,378,379,385,395,401],{},[203,380,381,382],{},"短字符串且长度接近固定 → ",[208,383,384],{},"CHAR",[203,386,387,388,391,392,394],{},"长度变化较大且不超过 255 字符 → ",[208,389,390],{},"VARCHAR","（但 ",[208,393,390],{}," 实际可更大，只是超过 255 需要额外考虑）",[203,396,397,398,400],{},"较长的文字内容 → ",[208,399,302],{}," 系列",[203,402,403,404,406],{},"二进制文件（图片、音频等）一般不建议存储在数据库中，而是存储文件路径，或用专门的对象存储。但如果必须存，使用 ",[208,405,341],{},"。",[408,409,410],"blockquote",{},[28,411,412,198,415,417,418,420,421,423],{},[69,413,414],{},"注意",[208,416,302],{}," 与 ",[208,419,390],{}," 的区别：",[208,422,302],{}," 会单独存储，可能产生额外的行溢出，影响性能；索引时需指定前缀长度。",[31,425,427],{"id":426},"三日期与时间类型","三、日期与时间类型",[36,429,430,444],{},[39,431,432],{},[42,433,434,436,439,442],{},[45,435,47],{},[45,437,438],{},"格式",[45,440,441],{},"范围",[45,443,59],{},[61,445,446,462,478,494,509],{},[42,447,448,453,456,459],{},[66,449,450],{},[69,451,452],{},"DATE",[66,454,455],{},"'YYYY-MM-DD'",[66,457,458],{},"'1000-01-01' ~ '9999-12-31'",[66,460,461],{},"仅日期",[42,463,464,469,472,475],{},[66,465,466],{},[69,467,468],{},"TIME",[66,470,471],{},"'HH:MM:SS' 或 'HHH:MM:SS'",[66,473,474],{},"'-838:59:59' ~ '838:59:59'",[66,476,477],{},"仅时间（可用于时间段）",[42,479,480,485,488,491],{},[66,481,482],{},[69,483,484],{},"DATETIME",[66,486,487],{},"'YYYY-MM-DD HH:MM:SS'",[66,489,490],{},"'1000-01-01 00:00:00' ~ '9999-12-31 23:59:59'",[66,492,493],{},"日期+时间（不受时区影响）",[42,495,496,501,503,506],{},[66,497,498],{},[69,499,500],{},"TIMESTAMP",[66,502,487],{},[66,504,505],{},"'1970-01-01 00:00:01' UTC ~ '2038-01-19 03:14:07' UTC",[66,507,508],{},"带时区的日期+时间，存储为 UTC 值，转换因时区设置而定",[42,510,511,516,519,522],{},[66,512,513],{},[69,514,515],{},"YEAR",[66,517,518],{},"'YYYY'",[66,520,521],{},"1901 ~ 2155",[66,523,524],{},"仅年份",[28,526,527,198],{},[69,528,376],{},[200,530,531,536,541,546,556],{},[203,532,533,534],{},"只需要日期 → ",[208,535,452],{},[203,537,538,539],{},"只需要时间 → ",[208,540,468],{},[203,542,543,544],{},"需要存储具体时刻且时区无关（如生日、历史事件） → ",[208,545,484],{},[203,547,548,549,552,553,555],{},"需要自动更新为当前时间（如 ",[208,550,551],{},"ON UPDATE CURRENT_TIMESTAMP","）或与时区联动 → ",[208,554,500],{},"（注意 2038 年问题）",[203,557,558,559,561,562,564,565,567],{},"存储占用：MySQL 5.6.4 起，",[208,560,500],{}," 占用 4 字节，",[208,563,484],{}," 占用 5 字节（均为不含小数秒的部分，小数秒精度每级额外占 0~3 字节）；5.6.4 之前 ",[208,566,484],{}," 占用 8 字节。根据需求选择。",[28,569,570,198],{},[69,571,572],{},"常用时间函数",[574,575,580],"pre",{"className":576,"code":577,"language":578,"meta":579,"style":579},"language-sql shiki shiki-themes material-theme-lighter github-light github-dark","NOW()         -- 当前日期时间\nCURDATE()     -- 当前日期\nCURTIME()     -- 当前时间\nDATE_ADD()    -- 日期加法\nDATEDIFF()    -- 日期差\n","sql","",[208,581,582,590,596,602,608],{"__ignoreMap":579},[583,584,587],"span",{"class":585,"line":586},"line",1,[583,588,589],{},"NOW()         -- 当前日期时间\n",[583,591,593],{"class":585,"line":592},2,[583,594,595],{},"CURDATE()     -- 当前日期\n",[583,597,599],{"class":585,"line":598},3,[583,600,601],{},"CURTIME()     -- 当前时间\n",[583,603,605],{"class":585,"line":604},4,[583,606,607],{},"DATE_ADD()    -- 日期加法\n",[583,609,611],{"class":585,"line":610},5,[583,612,613],{},"DATEDIFF()    -- 日期差\n",[31,615,617],{"id":616},"四其他类型","四、其他类型",[619,620,622],"h4",{"id":621},"_1-enum枚举","1. ENUM（枚举）",[28,624,625,626,628],{},"从预定义列表中选取一个值。存储时占用 1~2 字节，比 ",[208,627,390],{}," 更高效。",[574,630,632],{"className":576,"code":631,"language":578,"meta":579,"style":579},"gender ENUM('male', 'female', 'other')\n",[208,633,634],{"__ignoreMap":579},[583,635,636],{"class":585,"line":586},[583,637,631],{},[28,639,640],{},"优点：数据紧凑、防止非法输入。缺点：修改枚举列表成本高，不灵活。适合状态固定且值很少的字段。",[619,642,644],{"id":643},"_2-set集合","2. SET（集合）",[28,646,647,648,651],{},"从预定义列表中选取",[69,649,650],{},"零个或多个","值。每个值用一个位表示，最多 64 个选项。",[574,653,655],{"className":576,"code":654,"language":578,"meta":579,"style":579},"interests SET('sports', 'music', 'reading', 'travel')\n",[208,656,657],{"__ignoreMap":579},[583,658,659],{"class":585,"line":586},[583,660,654],{},[28,662,663],{},"存储时按位存储，占用 1~8 字节。适合多选的固定选项，但业务变更时不如关联表灵活。",[619,665,667],{"id":666},"_3-jsonmysql-57","3. JSON（MySQL 5.7+）",[28,669,670],{},"原生支持 JSON 数据类型，可存储和查询 JSON 文档。",[574,672,674],{"className":576,"code":673,"language":578,"meta":579,"style":579},"CREATE TABLE users (id INT, profile JSON);\nINSERT INTO users VALUES (1, '{\"name\":\"Alice\", \"age\":30}');\nSELECT profile->>'$.name' FROM users WHERE id = 1;\n",[208,675,676,681,686],{"__ignoreMap":579},[583,677,678],{"class":585,"line":586},[583,679,680],{},"CREATE TABLE users (id INT, profile JSON);\n",[583,682,683],{"class":585,"line":592},[583,684,685],{},"INSERT INTO users VALUES (1, '{\"name\":\"Alice\", \"age\":30}');\n",[583,687,688],{"class":585,"line":598},[583,689,690],{},"SELECT profile->>'$.name' FROM users WHERE id = 1;\n",[28,692,693],{},"优点：灵活存储半结构化数据，支持索引（生成列）。缺点：查询性能不如规范化的列，适合不常变动结构的数据。",[31,695,697],{"id":696},"五数据类型选择原则","五、数据类型选择原则",[699,700,701,714,730,738,746,755,764],"ol",{},[203,702,703,706,707,710,711,406],{},[69,704,705],{},"尽量使用最小满足需求的类型","：例如年龄用 ",[208,708,709],{},"TINYINT UNSIGNED","（0~255）而非 ",[208,712,713],{},"INT",[203,715,716,719,720,722,723,725,726,722,728,406],{},[69,717,718],{},"简单优先","：能用 ",[208,721,713],{}," 就不用 ",[208,724,390],{}," 存储数字，能用 ",[208,727,452],{},[208,729,484],{},[203,731,732,737],{},[69,733,734,735],{},"精度敏感用 ",[208,736,229],{},"：金额、重量等必须精确的场景。",[203,739,740,745],{},[69,741,742,743],{},"字符串长度固定用 ",[208,744,384],{},"：如 MD5 值（32 字符）、国家代码（2 字符）。",[203,747,748,754],{},[69,749,750,751,753],{},"大文本走 ",[208,752,302],{}," 或文件系统","：避免在数据库中存储超大文本或二进制文件影响性能。",[203,756,757,763],{},[69,758,233,759,762],{},[208,760,761],{},"ENUM\u002FSET"," 谨慎","：列表变化频繁时不适用，可改用关联表或应用层校验。",[203,765,766,769],{},[69,767,768],{},"JSON 字段适合存储不常查询的内部结构","：如果需要通过 JSON 内部字段过滤，建议创建生成列并建立索引。",[31,771,773],{"id":772},"六总结表","六、总结表",[36,775,776,789],{},[39,777,778],{},[42,779,780,783,786],{},[45,781,782],{},"分类",[45,784,785],{},"推荐类型",[45,787,788],{},"不推荐类型",[61,790,791,806,823,838,853,870,887],{},[42,792,793,796,801],{},[66,794,795],{},"整数 ID",[66,797,798],{},[208,799,800],{},"INT \u002F BIGINT",[66,802,803,805],{},[208,804,390],{},"（除非有特殊业务需求）",[42,807,808,811,816],{},[66,809,810],{},"金额",[66,812,813],{},[208,814,815],{},"DECIMAL(10,2)",[66,817,818,820,821],{},[208,819,165],{}," \u002F ",[208,822,183],{},[42,824,825,828,833],{},[66,826,827],{},"用户名",[66,829,830],{},[208,831,832],{},"VARCHAR(50)",[66,834,835,837],{},[208,836,384],{},"（长字段会浪费空间）",[42,839,840,843,848],{},[66,841,842],{},"固定代码",[66,844,845],{},[208,846,847],{},"CHAR(2)",[66,849,850,852],{},[208,851,390],{},"（稍浪费存储 + 长度字节）",[42,854,855,858,865],{},[66,856,857],{},"日期时间",[66,859,860,862,863],{},[208,861,484],{}," 或 ",[208,864,500],{},[66,866,867,869],{},[208,868,390],{},"（丧失日期函数便利性和索引效率）",[42,871,872,875,881],{},[66,873,874],{},"多选标志",[66,876,877,878,880],{},"位运算 ",[208,879,713],{}," 或关联表",[66,882,883,886],{},[208,884,885],{},"SET","（扩展性差）",[42,888,889,892,898],{},[66,890,891],{},"JSON 数据",[66,893,894,897],{},[208,895,896],{},"JSON"," 类型",[66,899,900,902],{},[208,901,302],{},"（失去 JSON 函数支持）",[28,904,905],{},"正确选择数据类型，可以有效减少存储空间、提升查询性能，同时保证数据完整性。建议在表设计阶段仔细斟酌每个字段的类型和约束。",[23,907,908],{"id":908},"参考文献",[36,910,911,920],{},[39,912,913],{},[42,914,915,918],{},[45,916,917],{},"资料",[45,919,59],{},[61,921,922,936],{},[42,923,924,933],{},[66,925,926],{},[927,928,932],"a",{"href":929,"rel":930},"https:\u002F\u002Fdev.mysql.com\u002Fdoc\u002Frefman\u002F8.0\u002Fen\u002F",[931],"nofollow","MySQL 8.0 手册",[66,934,935],{},"官方",[42,937,938,944],{},[66,939,940],{},[927,941,943],{"href":942},"\u002Fknowledge\u002Fbooklet\u002Fsql","数据存储导读",[66,945,946],{},"学习路径",[948,949,950],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":579,"searchDepth":592,"depth":592,"links":952},[953,961],{"id":25,"depth":592,"text":26,"children":954},[955,956,957,958,959,960],{"id":33,"depth":598,"text":34},{"id":240,"depth":598,"text":241},{"id":426,"depth":598,"text":427},{"id":616,"depth":598,"text":617},{"id":696,"depth":598,"text":697},{"id":772,"depth":598,"text":773},{"id":908,"depth":592,"text":908},{"title":8,"description":9},"knowledge\u002Fbooklet\u002Fsql\u002FMySql\u002Ftype","knowledge\u002Fknowledge\u002Fbooklet\u002Fsql\u002FMySql\u002Ftype.md","md",{"items":967},[968,973,977,981,985,989],{"path":969,"title":970,"description":971,"category":10,"score":972},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Ftool","常用函数","MySQL 提供了丰富的内置函数，用于处理字符串、数值、日期和时间以及条件逻辑。下面分类介绍最常用的基础函数。",6,{"path":974,"title":975,"description":976,"category":10,"score":972},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fjoin","多表查询","多表查询用于从两个或更多表中获取数据。常见的连接类型包括内连接、外连接（左、右）和自连接。",{"path":978,"title":979,"description":980,"category":10,"score":972},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Finstall","MySQL 安装与基本操作","MySQL 的安装因操作系统而异，但安装完成后，通过命令行客户端连接并进行基本管理的方法是通用的。下面分别介绍安装方式和常用命令。",{"path":982,"title":983,"description":984,"category":10,"score":972},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fdql","查询数据","数据查询语言（DQL）用于从数据库中检索数据，核心是 SELECT 语句。下面从基础查询、条件筛选、排序、限制行数、聚合与分组等方面进行介绍。",{"path":986,"title":987,"description":988,"category":10,"score":972},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fddl","数据库与表的基本操作","DDL（Data Definition Language）用于定义数据库结构，包括创建、修改、删除数据库和表。下面介绍 MySQL 中常用的 DDL 语句。",{"path":990,"title":991,"description":992,"category":10,"score":972},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fdml","数据操作","DML（Data Manipulation Language）用于对表中的数据进行增（INSERT）、删（DELETE）、改（UPDATE）。下面详细介绍这三类操作。",{"series":994,"title":12,"items":995,"index":1025,"prev":1026,"next":1027},"booklet\u002Fsql\u002Fmysql",[996,1000,1004,1008,1012,1014,1016,1018,1020,1022,1024],{"path":997,"title":998,"date":999,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fauth","用户与权限管理","2021-06-06",{"path":1001,"title":1002,"date":1003,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fbackup","备份与恢复","2024-02-23",{"path":1005,"title":1006,"date":1007,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fbase","MySQL 基础概念","2021-03-18",{"path":1009,"title":1010,"date":1011,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fmysql\u002Fconstraints","约束","2020-03-31",{"path":986,"title":987,"date":1013,"pinned":15},"2024-07-14",{"path":990,"title":991,"date":1015,"pinned":15},"2024-05-30",{"path":982,"title":983,"date":1017,"pinned":15},"2024-08-16",{"path":978,"title":979,"date":1019,"pinned":15},"2025-04-04",{"path":974,"title":975,"date":1021,"pinned":15},"2025-11-29",{"path":969,"title":970,"date":1023,"pinned":15},"2026-01-19",{"path":7,"title":8,"date":14,"pinned":15},10,{"path":969,"title":970,"date":1023,"pinned":15},null]