mysql设置字符集utf8mb4

为什么要把数据库的字符集设置成utf8mb4呢?以前一直用的都是utf8啊?
答案在这里:utf8适用于不使用移动设备的互联网交互,utf8mb4适用于当前的移动设备互联网开发,因为移动设备中常常会有表情符号(emoji)的存储,它占用4个字节的存储空间,而utf8是3个字节,这样,用3个字节去存储4个字节的东西,很明显是存不下的,会报错,所以要用utf8mb4,并且utf8mb4是兼容utf8的,那么,就没有理由不用utf8mb4字符集了。

介绍设置mysql的字符集:
1 在ubuntu安装mysql (密码自己设置)

sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev

2 进入mysql,查看信息

zhangl@zhangl:~$ mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.12-0ubuntu1 (Ubuntu)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+-------------------+
| Variable_name            | Value             |
+--------------------------+-------------------+
| character_set_client     | utf8              |
| character_set_connection | utf8              |
| character_set_database   | latin1            |
| character_set_filesystem | binary            |
| character_set_results    | utf8              |
| character_set_server     | latin1            |
| character_set_system     | utf8              |
| collation_connection     | utf8_general_ci   |
| collation_database       | latin1_swedish_ci |
| collation_server         | latin1_swedish_ci |
+--------------------------+-------------------+
10 rows in set (0.02 sec)

可以看到我的mysql版本是5.7的,utf8mb4有一个使用限制,mysql版本必须是5.5以上,大家需要注意,我目前用的ubuntu系统是16.04的。当前mysql的字符集配置如上表,我们的目的是更改成utf8mb4。

3 找到mysql的配置文件,可用命令

sudo find / -name my.cnf

我的配置文件位置如下,个别的位置有所不同
/etc/mysql/mysql.conf.d/mysqld.cnf

4 修改配置文件
在原文中添加以下内容:

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

原文件中无“[client]”和“[mysql]”,需要手动添加上。

......
# Here is entries for some specific programs
# The following values assume you have at least 32M ram

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
#
# * Basic Settings
#
user        = mysql
pid-file    = /var/run/mysqld/mysqld.pid
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking

character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
#
# Instead of skip-networking the default is now to listen only on
......

5 重启mysql服务

sudo service mysql restart

6 查看结果

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    3
Current database: *** NONE ***

+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+
10 rows in set (0.00 sec)

ok了,这就是我想要的结果,现象可以去连项目测试了。

如果你想将MySQL 8.0的字符集utf8mb4改为utf8,可以按照以下步骤进行: 1. 登录MySQL数据库。 2. 运行以下命令,查看当前字符集设置: ``` SHOW VARIABLES LIKE 'character_set%'; ``` 如果你看到的是utf8mb4,那么就需要进行字符集设置的更改。 3. 运行以下命令,备份你的数据库: ``` mysqldump -u username -p database_name > backup.sql ``` 其中,username是你的MySQL用户名,database_name是你要备份的数据库名,backup.sql是你的备份文件名。 4. 关闭MySQL数据库。 5. 编辑MySQL的配置文件my.cnf,在[mysqld]下添加以下两行: ``` [mysqld] character_set_server=utf8 ``` 6. 启动MySQL数据库。 7. 运行以下命令,修改数据库的字符集: ``` ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_general_ci; ``` 其中,database_name是你要修改的数据库名。 8. 运行以下命令,修改每个表的字符集: ``` ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ``` 其中,table_name是你要修改的表名。 9. 运行以下命令,查看字符集是否修改成功: ``` SHOW VARIABLES LIKE 'character_set%'; ``` 10. 如果成功修改字符集,那么恢复你的数据库,运行以下命令: ``` mysql -u username -p database_name < backup.sql ``` 其中,username是你的MySQL用户名,database_name是你要恢复的数据库名,backup.sql是你的备份文件名。 11. 最后,重启MySQL数据库,使得所有更改生效。 注意,修改字符集可能会影响到数据库中的数据,因此在进行操作之前请务必备份数据库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值