likes
comments
collection
share

MySQL经典问题解决方案

作者站长头像
站长
· 阅读数 64

  👉引言💎

铭记于心
🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉

经典问题

1. 编码问题(了解)

命令行操作sql乱码问题

mysql> INSERT INTO t_stu VALUES(1,'张三','男');
ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'sname' at row 1

修改my.ini配置文件

在路径:mysql的数据存储路径下 找到my.ini文件
修改内容1:
  找到[mysql]命令,大概在63行左右,在其下一行添加 
    default-character-set=utf8
修改内容2:
  找到[mysqld]命令,大概在76行左右,在其下一行添加
    character-set-server=utf8
    collation-server=utf8_general_ci

修改完毕后,重启MySQL57服务

查看编码命令

show variables like 'character_%';
show variables like 'collation_%';

命令行操作sql仍然乱码问题

mysql> INSERT INTO t_stu VALUES(1,'张三','男');
ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'sname' at row 1

原因:按照刚才的配置,服务器端认为你的客户端的字符集是utf-8,而实际上你的客户端的字符集是GBK。

查看所有字符集:SHOW VARIABLES LIKE ‘character_set_%’;

解决方案,设置当前连接的客户端字符集 “SET NAMES GBK;”

set names gbk;是为了告诉服务器,客户端用的GBK编码,防止乱码。

有的时候,这样还不能解决,例如,某些win10操作系统环境下,那么修改命令行的属性-》选项-》勾选使用旧版控制台,然后重启电脑

2. 忘记root用户密码问题

  1. 关闭MYSQL57服务
# 以管理员权限运行cmd
net stop MYSQL57
  1. 设置mysqld服务不检查权限密码

mysql5.5

mysqld --skip-grant-tables

mysql5.7版

# 修改my.ini文件
# 在[mysqld]下方添加
skip-grant-tables = true
  1. 开启MYSQL57服务
# 以管理员权限运行cmd
net start MYSQL57
  1. mysql -uroot 无密码登陆服务器
  2. 修改root账户的密码为"root"

mysql5.5版

update user set authentication_string=password("root") where user="root";

mysql5.7版

update mysql.user set authentication_string=password('root') where user='root';
  1. 刷新: flush privileges;
  2. 退出登录的mysql
exit;
  1. 修改my.ini文件,删除掉之前添加在[mysqld]下方的那一行
  2. 验证无密码登录是否会失败mysql -uroot
  3. 以新密码登录: mysql -uroot -proot

3. 查看字符集和校对规则

关于SQL的关键字和函数名等不区分大小写,但是对于数据值是否区分大小写,和字符集与校对规则有关。

_ci(大小写不敏感),_cs(大小写敏感),_bin(二元,即比较是基于字符编码的值而与language无关)

(1)查看所有字符集和和其默认的校对规则

(2)查看GBK和UTF-8字符集的校对规则

show collation like ‘gbk%’;

show collation like ‘utf8%’;

utf8_unicode_ci和utf8_general_ci对中、英文来说没有实质的差别。

utf8_general_ci 校对速度快,但准确度稍差。

utf8_unicode_ci 准确度高,但校对速度稍慢。

如果你的应用有德语、法语或者俄语,请一定使用utf8_unicode_ci。一般用utf8_general_ci就够了。

(3)查看服务器的字符集和校对规则

(4)查看和修改某个数据库的字符集和校对规则或修改数据库的字符集和校对规则:

ALTER DATABASE 数据库名称 DEFAULT CHARACTER SET 字符集名称 【COLLATE 校对规则名称】;

例如:

ALTER DATABASE ceshi_db DEFAULT CHARACTER SET utf8 collate utf8\_general_ci;

注意:修改了数据库的默认字符集和校对规则后,原来已经创建的表格的字符集和校对规则并不会改变,如果需要,那么需要单独修改。

(5)查看某个表格的字符集和校对规则

查看字符集:show create table users;

如果要查看校对规则:show table status from bookstore like ‘%users%’ ;

修改某个表格的字符集和校对规则:

修改表的默认字符集:

ALTER TABLE 表名称 DEFAULT CHARACTER SET 字符集名称 【COLLATE 校对规则名称】;

把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集:

ALTER TABLE 表名称 CONVERT TO CHARACTER SET 字符集名称 【COLLATE 校对规则名称】;

例如:ALTER TABLE ceshi_table DEFAULT CHARACTER SET gbk collate gbk_chinese_ci;

🌹写在最后💖: 路漫漫其修远兮,吾将上下而求索!伙伴们,再见!🌹🌹🌹MySQL经典问题解决方案