当前位置: 澳门新濠3559 > 数据库 > 正文

3.修改密码,让它输出utf8mb4格式的数据

时间:2019-11-07 13:43来源:数据库
1.修改MySQL的登录设置: 重置root密码 方法一:在my.ini的[澳门新濠3559,mysqld]字段加入: skip-grant-tables 重启mysql服务,这时的mysql不需要密码即可登录数据库 然后进入mysql mysqluse mysql; m

1.修改MySQL的登录设置:

重置root密码
方法一:在my.ini的[澳门新濠3559,mysqld]字段加入:
skip-grant-tables
重启mysql服务,这时的mysql不需要密码即可登录数据库
然后进入mysql
mysql>use mysql;
mysql>update user set password=password('新密码') WHERE User='root';
mysql>flush privileges;
运行之后最后去掉my.ini中的skip-grant-tables,重启mysqld即可。
修改mysql密码方法二:
不使用修改my.ini重启服务的方法,通过非服务方式加skip-grant-tables运行mysql来修改mysql密码
停止mysql服务
打开命令行窗口,在bin目录下使用mysqld-nt.exe启动,即在命令行窗口执行: mysqld-nt --skip-grant-tables
然后另外打开一个命令行窗口,登录mysql,此时无需输入mysql密码即可进入。
按以上方法修改好密码后,关闭命令行运行mysql的那个窗口,此时即关闭了mysql,如果发现mysql仍在运行的话可以结束掉对应进程来关闭。
启动mysql服务。

本人mysql安装在ubuntu16.04上,mysql版本是5.7.19;在创建表和插入数据时报了

无法插入表情是因为utf-8保存2-3个字节,而Emoji表情需要四个字节,解决办法大致有两个:1,使用正则表达式替换Emoji,2,修改mysql字符编码为utf8mb4。这里主要介绍第二种方法。

注意:utf8mb4是向下兼容utf8的,所以不必担心修改编码后会对原来的数据造成影响。

# vim /etc/my.cnf

作者“21世纪游戏运维”

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated 
column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

一 修改数据库,表,字段的编码为utf8mb4

这个方法网上一堆,就不做过多介绍,修改命令为:

ALTER DATABASE数据库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

同时Java连接数据库时不要添加characterEncoding字段.

大部分人在做了上述操作后就以为完事了,可是他们发现Emoji表情的确可以插入,但是在数据库里面显示为????,甚至中文也无法显示了。下面请看正文。

加上一句:skip-grant-tables

方法一:在my.ini的[mysqld]字段加入: skip-grant-tables 重启mysql服务,这时的mysql不需要密码即可登录数据库 然后进入mysql mysqluse m...

 在网上查到的解决方案是修改/etc/mysql/my.cnf文件,在其中添加如下内容,然后重启mysql(重启命令:service mysql restart)

二 正文

如:

[mysqld]
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

1 修改数据库配置文件

        第一步操作使你可以保存Emoji,但是它在数据库保存的编码格式为utf8mb4,然而你查看数据库或者从数据库取数据时,数据库给你的还是utf8格式,utf8是不兼容utf8mb4的,所以你看到和得到的是一堆问号,那么怎么改变呢,这就需要我们修改一下数据库的配置文件,让它输出utf8mb4格式的数据。

1.打开数据库配置文件(centos在/etc/my.cnf,win自己百度),加入下面文字:

[client]

# 客户端来源数据的默认字符集

default-character-set= utf8mb4

[mysqld]

# 服务端默认字符集

character-set-server=utf8mb4

# 连接层默认字符集

collation-server=utf8mb4_unicode_ci

[mysql]

# 数据库默认字符集

default-character-set= utf8mb4

文字来源:xiezefan.me/2015/02/03/mysql-utf8mb4/

同时,原文中有另外一种不用修改mysql的解决办法,也可以看看。

保存文件并退出,然后重启mysql。

2 重启mysql:

为什么我把重启mysql单独写呢?因为这是我在本次经历中遇到的最大的坑。

我保存完配置文件后去重启mysql,可是我试了下面所有命令也不能重启mysql:

etc/init.d/mysqld restart

systemctl restart mysql

service mysql restart

我检查了几遍都没有发现我的命令有什么错误,可是就是不能重启mysql,

这个时候我去查看我的mysql的版本,发现了如下提示:

5.5.44-MariaDB-log

这个MariaDB是什么玩意?

我查了百度,百度说“MariaDB数据库管理系统是MySQL的一个分支”,是开源社区为了避免甲骨文公司将mysql闭源的风险而采取的措施,

所以在linux下mysql其实是MariaDB(方便解释而已,他们并不是一个东西),所以在linux下重启mysql的命令为:

systemctl restart mariadb

好吧,请原谅我是一个小白,写这些就是为了给自己以及别人一个提示,以及记录自己成长的路。

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

 我尝试了之后,发现重启出现问题。

2.重启mysql

后来,我发现该版本的mysql配置引用了/etc/mysql/conf.d文件夹以及/etc/mysql/mysql.conf.d文件夹,且配置都放在了mysql.conf.d文件夹下的mysqld.cnf文件中,故将上述内容修改在该文件中,该文件中有[mysqld]

# service mysqld restart
Stopping MySQL: [ OK ]
Starting MySQL: [ OK ]

故只需要在该标签的后续内容添加

3.修改密码

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
mysql> USE mysql ;
Database changed
mysql> UPDATE user SET Password = password ( '新密码' ) WHERE User = 'root' ;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 2 Changed: 0 Warnings: 0
mysql> flush privileges ;
Query OK, 0 rows affected (0.01 sec)
mysql> quit

,并重启mysql。

4.修改刚刚改过的配置文件

完美解决。。。。

# vim /etc/my.cnf

5.重启mysql

# service mysqld restart
Stopping MySQL: [ OK ]
Starting MySQL: [ OK ]

 

编辑:数据库 本文来源:3.修改密码,让它输出utf8mb4格式的数据

关键词:

  • 上一篇:没有了
  • 下一篇:没有了