mysql中怎么设置字符集

好吧,我们必须这样做。

方法一:使用SQLyog更改默认字符表字段
1 . SQLyog 打开客户端。
2 . 连接数据库。
单击链接按钮,如图所示。
3 . 连接后,我选择了我的数据库。
4 .名为test2 的表是我随机选取的。
5 . 右键单击​​“更改表”。
6 、如果不关心数据库插入的字符集,默认为latin1 7 . 查看箭头并单击 utf8 字符串。

方法二:使用数据库命令更改字符
1 .首先查看数据库当前的字符集。
2 、在命令框中输入:show Variables like 'character_set_%'; 3 . 再看一下字符集排序设置。
4 . 输入:显示变量,如“collat​​ion_%”; 5 . 暂时改变服务器的角色等级设置。
6 、命令:SET GLOBAL character_set_server=utf8 ; 7 . 更改表级别。
8 .命令:ALTER TABLE_NAME DEFAULT CHARSET utf8 ; (将 table_name 替换为表名) 9 . 更改数据库级别。
1 0.先用:用edu; (替换为数据库名称) 1 1 . 再次输入:ALTER DATABASE ed CHARACTER SET utf-8 ; (输入您的数据库名称) 1 2 . 或者,在mysql的my.ini文件中设置重要值。
1 3 .找到[mysql][mysqld]部分。
1 4 .添加字符集设置。
1 5 .重启mysql。

说实话,我不明白为什么这次要改变。
但latin1 总是会出现问题,所以使用utf8 是正确的。

批量修改MySQL所有表的字符集修复乱码问题

有一天,我正在帮助一位同事调试网站。
用户反映,登录时他们的名字显示为乱码。
当我打开数据库时,我看到所有表都是utf8 格式的。
我用表情符号保存了一些昵称,结果它爆炸了。
我很快就想出了如何立即将所有内容更改为 utf8 mb4
首先检查当前数据库字符集。
以 root 用户身份运行: sql SHOW CREATE DATABASE test_db;
在结果中可以看到CHARACTERSET是utf8 ,这是正确的。
再次查表: sql SHOW CREATE TABLE users;
发现DEFAULT CHARSET也是edf8 最重要的是检查所有表: sql 选择表名称、表排序 FROM 信息表.TABLES WHERE TABLE_SCHEMA = 'test_db';
这次一切都出来了,6 个表都是utf8 _general_ci。
快速记下您要更改的表名称。

在更改表字符集之前,必须先处理索引问题。
使用show index from table name可以看到name字段上有索引。
必须先杀掉索引,然后修改表: sql ALTER TABLE 用户 DROP INDEX 名称; 更改表用户转换为字符集 utf8 mb4 收集 utf8 mb4 _unicode_ci; ALTER TABLE users ADD INDEX name(名称);
执行后查看表,排序规则居然是utf8 mb4 _unicode_ci。
进行批量更改时,必须添加计划任务。
每次修改表需要5 分钟,总时间正好是1 小时。

最麻烦的是它是一个使用latin1 字符集的存储过程。
改表后直接报错。
您必须逐个字段更改它: sql ALTER TABLE 过程 MODIFY name VARCHAR(2 5 5 ) CHARACTERSET utf8 mb4 COLLATE utf8 mb4 _unicode_ci;
进行更改后,重新启动 MySQL 服务。
此时,我主要担心界面还是用gb2 3 1 2 编码,所以赶紧给nginx添加了header:
add_header Content-Type "text/; charset=utf-8 "always;
第二天上线后测试发现,虽然还是被表情符号稍微变形了,但表情符号至少会有stormb4 (utf8 )正常显示。

等一下,我突然想到这是一张2 009 年建的老表,当时utf8 mb4 还没有流行……现在改变这张表会触发MySQL内部迁移机制吗?我查了文档,说会触发,但实际执行时间比新表长了2 0秒。
这需要特殊的监控。

现在想来,其实最稳妥的办法就是先搭建一个测试环境,同步那里的所有数据,然后再进行修改。
不过这一次我是着急赶工期,直接在生产环境中操作。
幸运的是,我使用的是主从架构。
换了主库后,切换到副库,发现所有表情都正常了。