【mysql小白】 用navicat创建数据库遇到无法解决的错误

学习数据库的时候,对着书上的代码敲,但是无法实现,检查了源代码没有发现错误。
如图,这个是书上的内容:

clipboard.png

clipboard.png

我用的是苹果电脑系统,用的软件是:

clipboard.png
我是这样设置的:

clipboard.png
代码如下:

CREATE TABLE `test`.`无标题`  (
  `studentNo` int(4) NOT NULL COMMENT '学号',
  `loginPwd` varchar(20) NOT NULL COMMENT '密码',
  `studentName` varchar(50) NOT NULL COMMENT '姓名',
  `sex` char(2) NOT NULL DEFAULT '男' COMMENT '性别',
  `gradeId` int(4) NULL COMMENT '年级编号',
  `phone` varchar(50) NULL COMMENT '联系电话',
  `address` varchar(255) NULL DEFAULT '地址不详' COMMENT '地址',
  `bornDate` datetime(0) NULL COMMENT '出生日期',
  `email` varchar(50) NULL COMMENT '邮件账号',
  `identityCard` varchar(18) NULL COMMENT '身份证号',
  PRIMARY KEY (`studentNo`),
  UNIQUE INDEX `n_identityCard`(`identityCard`(18))
) COMMENT = '学生表';

结果错误:

clipboard.png

clipboard.png

即便是放在终端里面输入也是这个结果,这说明不是软件问题,是代码本身问题,但是代码本身就是软件自动生成的,所以我就看不懂了。
到底错在哪儿啊?

阅读 5.4k
4 个回答

show variables like '%character%';看一下默认编码, 低版本的MySQL默认编码是latin1,不支持中文的,改为utf8就好了。

latin1:

db83-3306>>CREATE TABLE `test_c`  (                                                                                                                          
    ->   `studentNo` int(4) NOT NULL COMMENT '学号',
    ->   `loginPwd` varchar(20) NOT NULL COMMENT '密码',
    ->   `studentName` varchar(50) NOT NULL COMMENT '姓名',
    ->   `sex` char(2) NOT NULL DEFAULT '男' COMMENT '性别',
    ->   `gradeId` int(4) NULL COMMENT '年级编号',
    ->   `phone` varchar(50) NULL COMMENT '联系电话',
    ->   `address` varchar(255) NULL DEFAULT '地址不详' COMMENT '地址',
    ->   `bornDate` datetime(0) NULL COMMENT '出生日期',
    ->   `email` varchar(50) NULL COMMENT '邮件账号',
    ->   `identityCard` varchar(18) NULL COMMENT '身份证号',
    ->   PRIMARY KEY (`studentNo`),
    ->   UNIQUE INDEX `n_identityCard`(`identityCard`(18))
    -> ) CHARSET=latin1 COMMENT = '学生表';
ERROR 1067 (42000): Invalid default value for 'sex'

utf8:

db83-3306>>CREATE TABLE `test_c`  (
    ->   `studentNo` int(4) NOT NULL COMMENT '学号',
    ->   `loginPwd` varchar(20) NOT NULL COMMENT '密码',
    ->   `studentName` varchar(50) NOT NULL COMMENT '姓名',
    ->   `sex` char(2) NOT NULL DEFAULT '男' COMMENT '性别',
    ->   `gradeId` int(4) NULL COMMENT '年级编号',
    ->   `phone` varchar(50) NULL COMMENT '联系电话',
    ->   `address` varchar(255) NULL DEFAULT '地址不详' COMMENT '地址',
    ->   `bornDate` datetime(0) NULL COMMENT '出生日期',
    ->   `email` varchar(50) NULL COMMENT '邮件账号',
    ->   `identityCard` varchar(18) NULL COMMENT '身份证号',
    ->   PRIMARY KEY (`studentNo`),
    ->   UNIQUE INDEX `n_identityCard`(`identityCard`(18))
    -> ) CHARSET=utf8 COMMENT = '学生表';
Query OK, 0 rows affected (0.02 sec)

性别字段长度设置长一点试试

可能是字符集编码的问题,看下这个

sex字段改成varchar

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题