整理 MySQL 80 文档时发现一个变更:
默认字符集由 latin1 变为 utf8mb4。想起以前整理过字符集转换文档,升级到 MySQL 80 后大概率会有字符集转换的需求,在此正好分享一下。
当时的需求背景是:
部分系统使用的字符集是 utf8,但 utf8 最多只能存 3 字节长度的字符,不能存放 4 字节的生僻字或者表情符号,因此打算迁移到 utf8mb4。
迁移方案一1 准备新的数据库实例,修改以下参数:[mysqld]## Character Settingsinit_connect='SET NAMES utf8mb4'#连接建立时执行设置的语句,对super权限用户无效character-set-server = utf8mb4collation-server = utf8mb4_general_ci#设置服务端校验规则,如果字符串需要区分大小写,设置为utf8mb4_binskip-character-set-client-handshake#忽略应用连接自己设置的字符编码,保持与全局设置一致## Innodb Settingsinnodb_file_format = Barracudainnodb_file_format_max = Barracudainnodb_file_per_table = 1innodb_large_prefix = ON#允许索引的最大字节数为3072(不开启则最大为767字节,对于类似varchar(255)字段的索引会有问题,因为2554大于767)
2 停止应用,观察,确认不再有数据写入
可通过 show master status 观察 GTID 或者 binlog position,没有变化则没有写入。
3 导出数据
先导出表结构:mysqldump -u -p --no-data --default-character-set=utf8mb4 --single-transaction --set-gtid-purged=OFF --databases testdb > /backup/testdbsql
后导出数据:mysqldump -u -p --no-create-info --master-data=2 --flush-logs --routines --events --triggers --default-character-set=utf8mb4 --single-transaction --set-gtid-purged=OFF --database testdb > /backup/testdatasql
4 修改建表语句
修改导出的表结构文件,将表、列定义中的 utf8 改为 utf8mb4
5 导入数据
先导入表结构:mysql -u -p testdb < /backup/testdbsql
后导入数据:mysql -u -p testdb < /backup/testdatasql
6 建用户
查出旧环境的数据库用户,在新数据库中创建
7 修改新数据库端口,启动应用进行测试
关闭旧数据库,修改新数据库端口重启,启动应用
1、 编辑MySql的配置文件
MySql的配置文件Windows下一般在系统目录下或者在MySql的安装目录下名字叫myini,可以搜索,Linux下一般是 /etc/mycnf
--在 [mysqld] 标签下加上以下内容:
default-character-set = utf8
character_set_server = utf8
注意:如果此标签下已经存在“default-character-set=GBK”类似的内容,只需修改即可。
--在 [mysql] 标签下加上一行
default-character-set = utf8
--在 [mysqlserver]标签下加上一行
default-character-set = utf8
--在 [mysqld_safe]标签下加上一行
default-character-set = utf8
--在 [client]标签下加上一行
default-character-set = utf8
2、 重新启动MySql服务
Windows可在服务管理器中 *** 作,也可使用命令行:
net stop mysql 回车
net start mysql 回车
服务名可能不一定为mysql,请按自己的设置
Linux下面可是用 service mysql restart
如果出现启动失败,请检查配置文件有没有设置错误
3、 查看设置结果
登录MySql命令行客户端:打开命令行
mysql –uroot –p 回车
输入密码
进入mysql后 执行 :show variables like "% character %";
另外:
建立数据库时可以使用以下命令:
create database app_relation character set utf8;
use app_relation;
source app_relationsql;
修改数据库编码的命令为:
alter database app_relation character set utf8;
utf8编码可以支持一到4字节的字符编码,在mysql用我们一般使用utf8编码来处理字符类型,通常情况下都没有问题,但遇到4字节编码的字符,在数据存取的时候就会有问题了。
通常我们可能会得到一个错误或者警告:Incorrect
string
value:
'\xF0\x9D\x8C\x86'
for
column
Mysql
从553版本开始支持4字节的utf8编码,如果你的Mysql数据库是553+,按照以下步骤就能解决这个问题,如果版本低于553,是不是可以考虑升级数据库版本呢?
1、在修改数据库编码前先对数据库备份(虽然utf8mb4兼容utf8,但有备无患)
2、修改数据库的编码、表的编码、列的编码为utf8mb4
3、在Mysql数据库配置文件(myini)中加入如下设置
[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
重新启动Mysql数据库,确认设置生效
mysql>
show
VARIABLES
like
'%char%';
+--------------------------+----------------------------------------+
|
Variable_name
|
Value
|
+--------------------------+----------------------------------------+
|
character_set_client
|
utf8
|
|
character_set_connection
|
utf8
|
|
character_set_database
|
utf8mb4
|
|
character_set_filesystem
|
binary
|
|
character_set_results
|
utf8
|
|
character_set_server
|
utf8mb4
|
|
character_set_system
|
utf8
|
|
character_sets_dir
|
/home/app/mysql-5533/share/charsets/
|
+--------------------------+----------------------------------------+
8
rows
in
set
4、在获取数据库连接的时候执行sql:set
names
utf8mb4;我使用的是alibaba的开源数据库连接池程序,在配置文件中增加一行如下配置
<property
name="connectionInitSqls"
value="set
names
utf8mb4;"
/>
重新启动应用程序,问题解决,转载,仅供参考。
show
create
table
email\g
看看你表里面是什么编码存的
如果不是
gbk
那必然乱码
好把,你的数据库默认编码是
utf8mb4
如果你建表的时候没像这样
create
table
blablabla(
id
,
)
charset
=gbk;
指定成
gbk的
乱码
管理员登录:mysql -uroot -p123456;
查看现有字符集:
SHOW VARIABLES LIKE 'character%';
3设置字符集:
SET character_set_client = utf8; SET character_set_results = utf8; SET character_set_connection = utf8;
以上就是关于mysql6.0 utf8mb4怎么改为utf8全部的内容,包括:mysql6.0 utf8mb4怎么改为utf8、怎么设置mysql数据库的格式为utf8、如何在mysql中存取utf8mb4编码的字符等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)