修改mysql字符集

本文详细介绍了在使用MySQL时遇到字符集问题的解决方案,包括创建表时未注意字符集导致中文无法显示,通过修改表字符集和全局字符集设置成功解决了问题,并提供了相关配置步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2015.08.18

MySQL: 5.6.25
     OS: CentOS6.5
刚刚在做查询优化的时候,自己创建表,但是没有注意到字符集的问题,当我向默认情况下创建的表中插入数据的时候,死活都插不进去,中文的不能显示出来。
过程如下:
创建表:
create table t1 (
id int(10) PRIMARY KEY,
name varchar(20),
class varchar(20));

插入数据:
insert into t1 values(1,'zhangyi','一班');
insert into t1 values(2,'zhanger','二班');
结果显示:

  1. mysql> insert into t1 values(1,'zhangyi','');
    Query OK, 1 row affected (0.01 sec)

    mysql> insert into t1 values(2,'zhanger','');
    Query OK, 1 row affected (0.01 sec)

  2. mysql> select * from t1;
  3. +----+---------+--------+
  4. | id | name    | class |
  5. +----+---------+--------+
  6. | 1  | zhangyi |  |
  7. | 2  | zhanger |
  8. +----+---------+--------+
  9. 2 rows in set (0.00 sec)
当时没有想到是字符集的问题,就纳闷怎么查不进去,而且insert的时候,后面的中文没有显示出来,这就奇怪了。
去图形界面用navicat插入,也是不成功。然后就去查看字符集,

  1. mysql> show variables like '%character%';
  2. +--------------------------+----------------------------+
  3. | Variable_name            | Value                      |
  4. +--------------------------+----------------------------+
  5. | character_set_client     | utf8                       |
  6. | character_set_connection | utf8                       |
  7. | character_set_database   | latin1                     |
  8. | character_set_filesystem | binary                     |
  9. | character_set_results    | utf8                       |
  10. | character_set_server     | latin1                     |
  11. | character_set_system     | utf8                       |
  12. | character_sets_dir       | /usr/share/mysql/charsets/ |
  13. +--------------------------+----------------------------+
结果字符集不是UTF8 而是latin1

原因:
我的MySQL5.6.25是通过rpm包安装的,应该是MySQL默认的字符集是latin1。如果是编译安装可以再cmake的时候指定字符集。

解决办法:
我先把表的字符集修改为utf8,图形界面和命令行都一样
ALTER TABLE t1 DEFAULT CHARACTER SET=utf8;
再查看的时候就可以显示了。

为了以后的表都可以正常显示中文,我直接把MySQL数据库实例的字符集修改为utf8

5.6之前的版本是
     default-character-set=utf8
5.6版本修改字符集的参数是
    character-set-server=utf8
直接vi /etc/my.cnf 文件添加到[mysqld] 下面,重启MySQL即可

  1. [mysqld]
  2. socket = /mysqldata/mysql/mysql.sock
  3. character-set-server=utf8
再去数据库里面查看如下:

  1. mysql> show variables like '%character%';
  2. +--------------------------+----------------------------+
  3. | Variable_name            | Value                      |
  4. +--------------------------+----------------------------+
  5. | character_set_client     | utf8                       |
  6. | character_set_connection | utf8                       |
  7. | character_set_database   | utf8                       |
  8. | character_set_filesystem | binary                     |
  9. | character_set_results    | utf8                       |
  10. | character_set_server     | utf8                       |
  11. | character_set_system     | utf8                       |
  12. | character_sets_dir       | /usr/share/mysql/charsets/ |
  13. +--------------------------+----------------------------+
查看表记录显示:

  1. mysql> select * from t1;
  2. +----+---------+--------+
  3. | id | name    | class  |
  4. +----+---------+--------+
  5. | 1  | zhangyi | 一班   |
  6. | 2  | zhanger | 二班   |
  7. | 4  | zhangsi | 四班   |
  8. +----+---------+--------+
  9. 3 rows in set (0.00 sec)
### 如何修改 MySQL 字符集 #### 1. 确认当前数据库的字符集修改 MySQL 字符集之前,需要先查看当前数据库使用的字符集。可以通过以下 SQL 查询语句来获取服务器和数据库级别的字符集设置: ```sql SHOW VARIABLES LIKE 'character_set_%'; SHOW VARIABLES LIKE 'collation%'; ``` 这些命令会返回多个变量及其对应的值,其中 `character_set_server` 和 `collation_server` 是全局范围内的字符集和校对规则设置[^1]。 #### 2. 修改 MySQL 配置文件 要永久更改 MySQL字符集,最有效的方式是通过编辑 MySQL 的配置文件(通常是 `my.cnf` 或 `my.ini`)。以下是具体的步骤: - **Linux 平台** - 找到并打开 MySQL 的配置文件 `/etc/my.cnf` 或 `/etc/mysql/my.cnf`。 - 添加或修改以下内容: ```ini [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci ``` - **Windows 平台** - 找到 MySQL 的安装目录中的 `my.ini` 文件,默认路径可能是 `C:\ProgramData\MySQL\MySQL Server X.X\my.ini` 或者 `C:\Program Files\MySQL\MySQL Server X.X\my.ini`。 - 同样添加或修改如下内容: ```ini [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci ``` 注意:如果发现配置文件未生效,可以尝试将 `my.ini` 文件复制到其他指定位置,例如从 `%AppData%\Roaming\MySQL\MySQL Server X.X` 复制到 `C:\Program Files\MySQL\MySQL Server X.X`[^5]。 #### 3. 更改现有数据库和表的字符集 即使修改了配置文件,已存在的数据库、表以及字段仍然保持原有的字符集设定。因此,还需要手动更新它们的字符集。具体操作方法如下: - 更新整个数据库的字符集: ```sql ALTER DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` - 更新单个表的字符集: ```sql ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` - 如果仅需更改某个列的字符集: ```sql ALTER TABLE your_table_name MODIFY column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 以上命令均假设目标字符集为 `utf8mb4`,这是推荐的选择,因为它能更好地支持现代 Unicode 编码标准[^3]。 #### 4. 测试新设置 完成上述所有步骤后,重启 MySQL 服务使更改生效。随后再次运行前面提到的 `SHOW VARIABLES` 命令验证新的字符集是否成功应用。 --- ### 注意事项 - 在生产环境中进行此类变更前,请务必做好完整的备份工作以防万一出现问题。 - 使用 `utf8mb4` 替代传统的 `utf8` 可以完全兼容 Emoji 表情符号和其他扩展字符的支持[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值