一个mysql语句报错引发的故事

昨天在自己的本上装了mysql,打算练习sql语句,在创建表的时候报了错:

Invalid default value for 'sex'

就是说我sql语句中有个性别的默认值设置是无效的,性别用的是enum数据类型,出错原因是因为数据库的编码不对,数据库默认编码是latin1,我们需要设置为utf8。

那么我们去设置数据库的编码集,打开mysql安装目录下的my.ini,安装的完没改的话文件名my-default.ini,改成my.ini。然后配置成如下格式:

[mysqld]
# 设置3306端口
port=3306
 datadir = D:\work\mysqlData
 #最大连接数
 max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

然后以管理员身份打开cmd,这里有个小坑,是直接windows+r 出来的cmd其实不算管理员身份运行,所以要在C:\Windows\System32这个目录下找到cmd.exe程序,右键以管理员身份运行。

然后重启mysql使配置生效,windows环境下不能直接restart,要分两步:

net stop mysql

net start mysql

但是发现mysql启动不了:

这时候要看看mysql启动日志:

mysqld --console

 

 发现是端口被占用,打开任务管理器把mysql,mysql5服务关闭,再次启动,发现还是不行

 发现启动mysql服务时候没找到这个表,这个表其实是mysql初始的表,百度了下发现问题是我之前安装的时候用的直接是安装包安装,然后改my.ini配置文件的时候重新指定了data目录,所以在新的data目录下面没有完整的mysql初始化的一些配置表,那么我们就考虑初始化一下,在确定新指定的data文件夹下没有文件情况下, 如果文件夹下面有文件也会报错

mysql安装目录下执行下面语句:

 mysqld --initialize-insecure --user=mysql

这样就成功初始化了,然后在重新启动mysql服务,然后就可以看到mysql启动成功 

 然后我们进入mysql,但是点击mysql command line client进去输入密码之后发现闪退,这个问题百度了下有完整的解决方法,可以直接看这位朋友的https://blog.csdn.net/fanchunyankeep/article/details/80306947icon-default.png?t=L9C2https://blog.csdn.net/fanchunyankeep/article/details/80306947这里有个不一样的地方就是我安装的是mysql5.7版本里,user表里没有password这个字段,密码字段用的是authentication_string,所以修改密码的sql语句应该改成:

update user set authentication_string=password('123') where user='root'and host='localhost';

闪退问题解决之后进入mysql,查看系统编码集:

show variables like 'character%'

 可以看到已经改成utf8了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值