前提
utf8mb4 的最低 Mysql 版本支持版本为 5.5.3+,若不是,请升级到较新版本。
如果你用的是 java 服务器,升级或确保你的 mysql connector 版本高于 5.1.13,否则仍然无法使用 utf8mb4。
准备:查看当前版本及字符集
查看当前版本,Linux 命令:
# mysql -V
登录 Mysql 进入命令行模式:
# mysql -uroot -p你的密码
查看当前 Mysql 字符集设置:
msql> SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
步骤一:改 Mysql 配置文件 my.cnf
Windows 下配置文件是安装目录下的 my.ini。
Linux 下 Mysql 配置文件一般在:/etc/my.cnf。
Linux 下 Mysql 配置文件一般在:/etc/mysql/mysql.cnf。
字符配置改为:
[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'
步骤二:改已有的 database、table 和 column 字符集
msql> ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
msql> ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
msql> ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
其中的 database_name、table_name、column_name 要替换成你对应的数据库名、表名、列名。VARCHAR 的长度值也是。
步骤三:重启 Mysql 并检查更改后的字符集设置
Linux 下重启命令:
# service mysql restart
再次登陆 Mysql 并查看字符集设置:
msql> SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
此时结果应该如下:
+--------------------------+--------------------+
| 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 |
+--------------------------+--------------------+
rows in set (0.00 sec)
步骤四:关于 JDBC URL
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8&autoReconnect=true
jdbc.username=root
jdbc.password=password
autoReconnect 表示:当数据库连接异常中断时,是否自动重新连接?默认是 false。