必须先双击展开目标数据库再右键“表”→“新建表”,确认窗口左上角显示“数据库:xxx”;字段类型、主键、字符集须与数据库一致,表名须全小写加下划线,禁止空格中文特殊符号。
能直接点鼠标建表,就别手写 create table —— 但必须清楚每一步在改什么,否则字段类型选错、主键漏设、字符集不一致,后面查数据会莫名其妙丢中文或报错。
点击“新建表”后第一件事:确认当前数据库已选中
Navicat 不像命令行有 USE database_name 的上下文记忆。右键“表” → “新建表”时,它默认往你**当前高亮的数据库**里建表。如果左侧导航栏里没点开某个数据库(比如 class_one),而是只点了连接名(如 localhost_3306),那建表操作会失败或建到系统库下,极难排查。
- 务必先双击展开目标数据库,再右键其下的“表”项
- 建表窗口左上角会显示“数据库:
class_one”,这是唯一可信的确认依据 - 如果这里显示的是
mysql或information_schema,立刻关掉窗口,回去重新选库
字段设置里最容易翻车的三个参数
在“字段”选项卡里填每一列时,类型、长度、允许空 这三项不是随便选的,它们直接影响后续能否存入数据、索引是否生效、甚至迁移时是否兼容。
-
VARCHAR(20)和VARCHAR(255)看似只是长度差,但 MySQL 8.0+ 对VARCHAR超过 255 字符的字段加索引时,会强制要求指定前缀长度(如INDEX(name(191))),而 GUI 里不显式提示 - “自动递增”必须配合“主键”或“唯一非空索引”才生效;单独勾了“自动递增”但没设主键,保存时 Navicat 会静默忽略该设置
- “允许空”为否(即
NOT NULL)时,如果没设DEFAULT值,后续用INSERT INTO table_name () VALUES ();就会报错Field 'xxx' doesn't have a default value
保存前必须手动输表名,且不能含大写字母或特殊符号
点击 Ctrl+S 或工具栏“保存”按钮后,Navicat 弹出的窗口叫“表属性”,但它真正要你填的只有“表名”——这个输入框没默认值,不填就无法继续。而且命名规则比你想象中严格:
- MySQL 在 Linux 系统下默认区分库/表名大小写,
UserTable和usertable是两个不同表;Navicat 的 GUI 操作不会帮你转小写,输错就真建错了 - 空格、中文、短横线(
-)、点号(.)都会导致建表语句语法错误,但 Navicat 可能只报“执行失败”,不提示具体哪错了 - 推荐命名方式:
user_profile、order_item,全小写 + 下划线,零歧义,跨平台安全
字符集和排序规则不是“选了就行”,得跟数据库保持一致
建表窗口底部有“表选项”标签页,里面可设字符集(Collation)。很多人直接点默认值,结果发现存中文变问号、ORDER BY 排序乱序、甚至 UNIQUE 约束对大小写不敏感(比如 Abc 和 abc 被认为重复)。
- 如果数据库创建时用了
utf8mb4+utf8mb4_unicode_ci,表就必须沿用这套,不能选utf8或utf8mb4_general_ci -
_ci表示 case-insensitive(不区分大小写),_cs才区分;业务需要严格区分用户名大小写时,得选utf8mb4_0900_as_cs(MySQL 8.0+) - Navicat 不会校验你选的字符集是否与数据库兼容,错配后只能删表重建
可视化建表省事,但字段类型、主键逻辑、字符集这三处一旦设错,后期改起来比重写还麻烦——因为涉及数据迁移、索引重建、应用层适配。动手前花 10 秒看一眼数据库的 SHOW CREATE DATABASE class_one; 输出,比盲目点确定强得多。


















