问题背景:【8003】如何解决mysql中创建表格遇到 Invalid default value for ‘sex‘?
当我在创建表(含有sex char(2) default ‘男’ )时,控制台报错:Invalid default value for ‘sex‘:直接上图:
注意:其实只要语句中含有中文都会出现报错的哦!这是后来我多次运行了解的,被迫走了方法2的路。
问题解决方案:(原理在后面)
方法1.
取巧直接在创建表格 )后面加上:ENGINE=InnoDB DEFAULT CHARSET=utf8,每创建一次就写一个转码语句 即可:如图:验证成功,但是很麻烦嘞,并且治标不治本,每次创建表格如果含有中文汉字就必须加上那句命令,否则报错。
方法2(三步骤):
- 修改数据库的默认编码(问题本质出错所在–数据库默认编码问题),首先要找到my.ini的配置文件;
- 编辑该文件,并修改这两个值为: utf8mb4(5.1.13版本后支持),并且进行保存,当然你也可以选择改为utf8,我帮别人修改的是utf8也成功了,我是出于以后在java中utf8mb4有更好的兼容性才设置的:如图:
default-character-set=utf8mb4或者default-character-set=utf8
character-set-server=utf8mb4或者character-set-server=utf8
- (推荐)关闭mysql服务,再进行重启(个人比较喜欢从任务管理器直接重新启动,但是身为程序员还要正规点,嘿嘿)。
方法1:启动任务管理器–>点击服务–>找到mysql(我的叫mysql57)右击有个重新启动。点击完成。
(在命令行窗口直接输入services.msc 可直接打开服务 )。
另一种关闭方式:注意:我的mysql的名字叫mysql57,你数据库名可能叫mysql,底下代码要改一下,我的mysqlpath配置是在系统变量里,用户是没有权利访问的,要以管理员的身份运行,右击命令行即可。
1.先输入关闭mysql服务:
net stop mysql57或者net stop mysql
2.在输入再进行重启mysql:
net start mysql57或者net start mysql
最后再次运行代码就可以识别字段咯!嘿嘿!当然,你如果还是没成功,去看分析,应该是需要深层处理你的数据库启动问题!!!
原因分析:
1.大概你也猜到了是编码格式不匹配的原因,数据库的编码不对,数据库默认编码是latin1,我们需要设置为utf8或者utf8mb4;
2.这个是当我们在安装数据库就需要设置的东西,如果你安装数据库配置my.ni看的那篇博主关于配置my.ni没有在意编码问题的话,只是为了让你能运行数据库,就可能出现的错误,这也是有些人成功,有些人却失败的原因,这时候就需要删掉data重新生成data,启动服务咯!
3.这里其实就是另一个问题了,数据库编码其实你已经设置完毕,没有成功的原因是你需要运用现在设置后的配置文件,才需要删掉以前的哦;
4.有一部分人修改my.ni没猜错的话你去命令行连密码都登录错误,会出现Access denied for user ‘root’@‘localhost’(using password:YES)的报错,嘿嘿!这篇写的够长了,如何有效运行解决这个问题直接上网址:
https://blog.csdn.net/Caojian_0/article/details/126185025
5.有问题可以直接问,会及时回复,不出意外问题到这里都能得到解决,加油!