mysql> show create database ytt_new3G*************************** 1. row *************************** Database: ytt_new3Create Database: CREATE DATABASE `ytt_new3` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */1 row in set (0.00 sec)查询出来最麻烦 , 因为每次查询出来的结果只能有一个字符集 , 字符集兼容的列可以一起检索;不兼容的列得分开检索 。举个例子 , 我想简单的 SELECT * 拿出所有记录 , 结果发现有一个字段据显示不正常 。
mysql> select * from t1;+-----------+------------------+--------------+| a1| a2| a3|+-----------+------------------+--------------+| character | 瀛楃?闆嗗悎| 字符集合|+-----------+------------------+--------------+1 row in set (0.00 sec)所以针对这种情形 , 该怎么检索数据呢?必须得对单个字段检索或者是对兼容的列一起检索 。
-- 以字符集 GBK 输出列 a1 a2 , 由于 a1 是保存的是字母 , 所以兼容输出 。mysql> set names gbk;Query OK, 0 rows affected (0.00 sec)mysql> select a1,a2 from t1;+-----------+--------------+| a1| a2|+-----------+--------------+| character | 字符集合|+-----------+--------------+1 row in set (0.00 sec)-- 以字符集utf8mb4和gbk不兼容 , 得单独输出列a3 。或者单独输出a2.mysql> set names utf8mb4;Query OK, 0 rows affected (0.00 sec)mysql> select a3 from t1;+--------------+| a3|+--------------+| 字符集合|+--------------+1 row in set (0.00 sec)2. 隐式转换
这种方式 , 是最推荐的 , 也是最长的方式 , 所有列继承表的字符集 , 不单独指定 。
-- 建表 t2 , 指定字符集为 gbk.mysql> create table t2(a1 varchar(10),a2 varchar(10)) charset gbk;Query OK, 0 rows affected (0.05 sec)mysql> show create table t2G*************************** 1. row ***************************Table: t2Create Table: CREATE TABLE `t2` (`a1` varchar(10) DEFAULT NULL,`a2` varchar(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=gbk1 row in set (0.01 sec)但是这里有一个需要注意的点 , 如果此时对表进行字符集变更 , 那表的列依然保留原来的字符集 。
例如:
mysql> alter table t2 charset utf8;Query OK, 0 rows affected, 1 warning (0.01 sec)Records: 0Duplicates: 0Warnings: 1mysql> show create table t2G*************************** 1. row ***************************Table: t2Create Table: CREATE TABLE `t2` (`a1` varchar(10) CHARACTER SET gbk DEFAULT NULL,`a2` varchar(10) CHARACTER SET gbk DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)如果想把表里字段的字符集也改了 , 应该用以下语句更改表字符集 。
mysql> alter table t2 convert to character set utf8;Query OK, 0 rows affected, 1 warning (0.09 sec)Records: 0Duplicates: 0Warnings: 1mysql> show create table t2G*************************** 1. row ***************************Table: t2Create Table: CREATE TABLE `t2` (`a1` varchar(10) DEFAULT NULL,`a2` varchar(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)那到这儿 , 我们已经了解了字符集对数据库 , 表以及列的使用以及相关影响 。
【第08期:有关 MySQL 字符集的注意事项】大致总结下 , 这篇我详细介绍了字符集在 MySQL 数据库 , 表以及列相关对象处理时的注意事项 , 并且举例说明 。希望对大家有帮助 。
推荐阅读
- 第六十一章、C程序中怎么调用Linux中的shell命令
- 春茶播报第四站,普洱茶新茶行情播报
- 临床医学|医学类专业什么最“吃香”?护理学排名第5,前三甲让人眼前一亮
- 乳房肿疼
- 白领防辐射有妙招 4款药茶效果好
- 茶叶包装的材料设计,祥源易武藏锋喜获第二届中国农产品包装设计大赛等,祥源易武
- 禅茶和乐缘来径山:布达雅乐音乐会,奏响富美径山第一曲
- 第五届中国采茶节开幕,某地举办采茶节
- 新中国第一位女导演是谁?
- kpl|北慕知道为什么KPL不要他!易瞳巅峰赛随便第一,却打不了职业
