mysql设置默认编码格式utf-8

在mac OS环境下使用MySQL 5.7.20时遇到中文插入数据库报错,通过创建并配置my.cnf文件,设置default-character-set为utf8,以及更新表字段编码为utf8,解决了问题。配置包括在[client]和[mysqld]部分设置字符集,并确保重启MySQL服务。

前言

  • mysql 5.7.20
  • mac os下演示

最近稍微闲了一阵子,就想去弄一下后台,于是装了mysql数据库,一开始登录mysql、创建用户、授权、创建数据库、创建表等都很顺利,在做表插入的时候发现mysql中文插入报错,于是网上搜索解决办法,发现都是 /usr/local/mysql/support-files 目录下找my-default.cnfmy.cnf文件,奇怪的是这两个文件都没有,

经过一番操作后,发现只需要创建一个 my.cnf 文件就可以了,然后移动到/etc目录下就行了

配置

  • 终端下创建 my.cnf

    cd ~
    touch my.cnf
  • 编辑 my.cnf

    open -a xcode my.cnf

    [client]
    default-character-set=utf8
    [mysqld]
    default-storage-engine=INNODB
    character-set-server=utf8
    collation-server=utf8_general_ci

  • 移动 my.cnf/etc目录下

    mv my.cnf /etc

大功告成,记得重启一下mysql服务,系统偏好设置底下打开MySql,重启后查看一下

/usr/local/mysql/bin/mysql -uwz -p

# 如果配置了.base_profile,那么输入 mysql -uroot -p 就行了
# 输入你的root账户密码

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.20 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, 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.

# 再次输入
show variables like '%char%';

+--------------------------+-----------------------------------------------------------+
| Variable_name            | Value                                                     |
+--------------------------+-----------------------------------------------------------+
| character_set_client     | utf8                                                      |
| character_set_connection | utf8                                                      |
| character_set_database   | utf8                                                      |
| character_set_filesystem | binary                                                    |
| character_set_results    | utf8                                                      |
| character_set_server     | utf8                                                      |
| character_set_system     | utf8                                                      |
| character_sets_dir       | /usr/local/mysql-5.7.20-macos10.12-x86_64/share/charsets/ |
+--------------------------+-----------------------------------------------------------+
8 rows in set (0.01 sec)

# 如果提示这样就说明可以了

如果你的/usr/local/mysql/support-files文件夹中有一个my-default.cnf文件,将它复制到桌面更名为my.cnf,最后还是一样移动到/etc目录下

更改当前表字段的编码格式

上述操作后,你发现还是插入不了中文,那么你可以看下当前表所有字段状态

# 选中数据库
use test;
# 查看表字段状态
SHOW FULL COLUMNS FROM 'you table';

+----------+------------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
| Field    | Type             | Collation       | Null | Key | Default | Extra          | Privileges                      | Comment |
+----------+------------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
| id       | int(10) unsigned | NULL            | NO   | PRI | NULL    | auto_increment | select,insert,update,references |         |
| username | varchar(45)      | utf8_general_ci | NO   |     | NULL    |                | select,insert,update,references |         |
| password | varchar(45)      | utf8_general_ci | NO   |     | NULL    |                | select,insert,update,references |         |
+----------+------------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
3 rows in set (0.01 sec)

# 更改字段的编码格式
ALTER TABLE `test`.`table_user` CHANGE COLUMN `username` `username` VARCHAR(45) CHARACTER SET 'utf8_unicode_ci' NOT NULL ;

ALTER TABLE `test`.`table_user` CHANGE COLUMN `password` `password` VARCHAR(45) CHARACTER SET 'utf8_unicode_ci' NOT NULL ;

# 查看表字段状态
SHOW FULL COLUMNS FROM 'you table';

如果字段的编码格式是utf8_general_ci的话,应该不会出现插入报错的情况,请检查你的sql

### 如何在创建数据库设置字符集为 UTF-8MySQL 中,可以通过 `CREATE DATABASE` 语句指定字符集和排序规则。为了确保数据库支持真正的 UTF-8 编码(即支持 4 字节字符),需要使用 `utf8mb4` 而不是传统的 `utf8`,因为 MySQL 的 `utf8` 实际上仅支持最多 3 字节的字符[^3]。 以下是一个示例命令,用于创建一个名为 `yourDatabaseName` 的数据库,并将其字符集设置为 `utf8mb4`: ```sql CREATE DATABASE IF NOT EXISTS yourDatabaseName DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci; ``` 上述命令中: - `DEFAULT CHARACTER SET utf8mb4` 指定了数据库默认字符集为 `utf8mb4`。 - `DEFAULT COLLATE utf8mb4_general_ci` 指定了默认的排序规则为 `utf8mb4_general_ci`,这是一个不区分大小写的通用排序规则。 如果需要验证数据库的字符集是否正确设置,可以执行以下查询: ```sql SHOW VARIABLES LIKE 'character_set%'; ``` 查询结果应类似于以下内容,显示客户端、连接、数据库等的字符集均为 `utf8mb4` 或 `utf8`[^2]: | Variable_name | Value | |-------------------------|---------| | character_set_client | utf8mb4 | | character_set_connection| utf8mb4 | | character_set_database | utf8mb4 | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | 通过上述方法,可以确保数据库在创建时正确设置UTF-8 编码。 ### 注意事项 虽然 MySQL 提供了 `utf8` 字符集选项,但由于其限制(仅支持 3 字节字符),建议始终使用 `utf8mb4` 来满足现代应用对完整 UTF-8 编码的支持需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值