昨天在自己的本上装了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/80306947https://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了。