mysql设置字符集

MySQL字符集查看、修改及库表变更方法
博客介绍了MySQL字符集相关操作。先通过命令查看字符集,发现默认客户端和服务器用latin1会导致乱码。接着介绍修改my.cnf配置文件,将字符集设为utf8,重启mysql后新库生效。还说明了已生成库表字符集的变更方法,但原数据编码不变。


1 查看字符集
show variables like 'character%'; 
show variables like '%char%';
看看出现的结果:
 

默认的是客户端和服务器都用了latin1,所以会乱码。
 
 
 2 修改my.cnf
在/usr/share/mysql/ 中找到my.cnf的配置文件,
拷贝其中的my-huge.cnf 到 /etc/  并命名为my.cnf 
mysql 优先选中 /etc/ 下的配置文件
然后修改my.cnf:
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8
 3、重新启动mysql
 但是原库的设定不会发生变化,参数修改之对新建的数据库生效
 
4、已生成的库表字符集如何变更
修改数据库的字符集
mysql> alter database mytest character set 'utf8';
修改数据表的字符集
mysql> alter table user convert to  character set 'utf8';
 
 但是原有的数据如果是用非'utf8'编码的话,数据本身不会发生改变。
 
 
 
 
 
 

### 如何在 MySQL设置字符集及相关配置方法 #### 设置 MySQL 字符集的整体思路 MySQL字符集可以在多个层面进行配置,包括服务器全局级别、数据库级别、表级别以及列级别。这些不同级别的字符集设置会影响数据存储和查询的方式。 --- #### 1. **服务器全局级别的字符集设置** 通过修改 MySQL 配置文件 `my.cnf` 或 `my.ini` 来调整全局默认字符集。通常需要编辑以下参数: - `[mysqld]` 下的 `character-set-server` 参数用于定义全局默认字符集- 示例配置如下: ```ini [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci ``` 保存并重启 MySQL 服务后生效[^1]。 可以通过运行以下 SQL 查询当前的全局字符集设置: ```sql SHOW VARIABLES LIKE 'character_set_server'; ``` --- #### 2. **创建数据库时指定字符集** 当创建一个新的数据库时,可以显式地为其指定字符集和校对规则。语法如下: ```sql CREATE DATABASE database_name DEFAULT CHARACTER SET charset_name COLLATE collation_name; ``` 例如,创建一个名为 `test_db` 的数据库,并将其字符集设为 UTF-8: ```sql CREATE DATABASE test_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ``` 此操作会确保该数据库中的所有新表都继承这个字符集设定[^3]。 --- #### 3. **更改现有数据库的字符集** 如果已经存在某个数据库,也可以通过 ALTER 命令来更新其字符集: ```sql ALTER DATABASE database_name CHARACTER SET = charset_name COLLATE = collation_name; ``` 比如将已有数据库 `old_db` 转换到 UTF-8 编码: ```sql ALTER DATABASE old_db CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; ``` 需要注意的是,仅改变数据库级别的字符集不会自动影响已有的表或字段,可能还需要进一步处理它们的具体编码属性[^2]。 --- #### 4. **表级别的字符集设置** 对于单张表格而言,在建立之初就可以指明所使用的字符集形式;同样地,针对既存的数据结构则需运用相应的语句予以修正。 ##### 创建带特定字符集的新表 ```sql CREATE TABLE table_name ( id INT PRIMARY KEY, name VARCHAR(255) ) DEFAULT CHARSET=charset_name COLLATE=collation_name; ``` 实例演示: ```sql CREATE TABLE users ( user_id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50), email VARCHAR(100) ) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; ``` ##### 修改现存表的字符集 利用下面这条指令能够实现对一张旧有表重新定义它的字符集标准: ```sql ALTER TABLE table_name CONVERT TO CHARACTER SET charset_name COLLATE collation_name; ``` 举个例子来说就是把叫做 products 表改成支持中文输入环境下的 GBK 格式的做法应该是这样的样子: ```sql ALTER TABLE products CONVERT TO CHARACTER SET gbk COLLATE gbk_chinese_ci; ``` --- #### 5. **连接客户端时临时切换字符集** 有时为了满足特殊需求或者调试方便起见,我们希望只在这一次交互过程中采用不同于系统预设好的那种方式来进行字符串表达的话,则可通过执行 set names 指定本次对话期间有效果的一个新的编码体系作为依据对象对待待接收过来的信息流做解析动作之用。 ```sql SET NAMES charset_name [COLLATE collation_name]; ``` 像这样告诉 mysql 我们打算发送过去给它看懂的内容都是按照 latin1 这样的模式封装好了送过去的啦: ```sql SET NAMES latin1; ``` 以上每一步骤均对应着各自独立却又相互关联紧密的一系列逻辑链条环节构成整个流程框架图谱展示出来供大家参考学习借鉴使用哦! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值