2. 继承设置(隐式转换)
默认继承所属数据库级别的字符集和排序规则 。这里需要注意的是所属数据库 , 不是当前数据库 。
mysql> create database ytt_new2 default character set latin1 collate latin1_bin;Query OK, 1 row affected (0.03 sec)mysql> use ytt_new2Database changedmysql> select @@character_set_database, @@collation_database;+--------------------------+----------------------+| @@character_set_database | @@collation_database |+--------------------------+----------------------+| latin1 | latin1_bin |+--------------------------+----------------------+1 row in set (0.00 sec)3. 视图
视图其实就是虚拟的表 , 所以视图的字符集也划在表这块简单介绍下 。视图的字符集完全依赖客户端的字符集设置 。
比如:
-- 简单写个存储过程DELIMITER $$USE `ytt_new2`$$DROP PROCEDURE IF EXISTS `sp_demo`$$CREATE DEFINER=`root`@`%` PROCEDURE `sp_demo`( IN f1 VARCHAR(10), IN f2 VARCHAR(10) )BEGIN DECLARE v1 VARCHAR(20); SET v1 = CONCAT(f1,f2); SELECT v1 AS result;END$$DELIMITER ;4. 触发器
触发器基于表 , 所以触发器也归类到表这块 。其实触发器的编码规则和视图一样 。也是依赖客户端的设定 。
比如一个简单的触发器:
mysql> show create procedure sp_demoG*************************** 1. row *************************** Procedure: sp_demo... Database Collation: latin1_bin1 row in set (0.00 sec)-- 那接下来改掉数据库的字符集为 UTF8mysql> alter database ytt_new2 character set utf8 collate utf8_general_ci;Query OK, 1 row affected, 2 warning (0.02 sec)mysql> select @@character_set_database, @@collation_database;+--------------------------+----------------------+| @@character_set_database | @@collation_database |+--------------------------+----------------------+| utf8 | utf8_general_ci |+--------------------------+----------------------+1 row in set (0.00 sec)-- 再查看存储过程 sp_demo 的字符集 , 还是之前的 。mysql> show create procedure sp_demoG*************************** 1. row *************************** Procedure: sp_demo... Database Collation: latin1_bin1 row in set (0.00 sec)-- 此时 , 调用存储过程 , 字符集不对 , 报编码错误 。mysql> call sp_demo('我','你');ERROR 1366 (HY000): Incorrect string value: '\xE6\x88\x91' for column 'f1' at row 1-- 改变存储过程字符集只能删除重建 , 重新执行下之前的存储过程代码 , 再次调用 , 结果就正常了 。mysql> call sp_demo('我','你');+--------+| result |+--------+| 我你 |+--------+1 row in set (0.00 sec)Query OK, 0 rows affected, 2 warnings (0.01 sec)三、列和字符集1. 显式指定
同数据库和表一样 , 列也可以显式指定特定的字符集和排序规则 。虽说是可以这样做 , 但是非常不推荐 , 最主要原因是每个列字符集不一样 , 导致写入和检索都得额外的编写 SQL 。
mysql> select @@character_set_server charset, @@collation_server collation -> union all -> select @@character_set_database, @@collation_database;+---------+--------------------+| charset | collation |+---------+--------------------+| utf8mb4 | utf8mb4_0900_ai_ci || utf8mb4 | utf8mb4_0900_ai_ci |+---------+--------------------+2 rows in set (0.00 sec)那接下来简单插入一条记录 , 需要为每列添加 introduer , 否则报错 。
推荐阅读
- 第六十一章、C程序中怎么调用Linux中的shell命令
- 春茶播报第四站,普洱茶新茶行情播报
- 临床医学|医学类专业什么最“吃香”?护理学排名第5,前三甲让人眼前一亮
- 乳房肿疼
- 白领防辐射有妙招 4款药茶效果好
- 茶叶包装的材料设计,祥源易武藏锋喜获第二届中国农产品包装设计大赛等,祥源易武
- 禅茶和乐缘来径山:布达雅乐音乐会,奏响富美径山第一曲
- 第五届中国采茶节开幕,某地举办采茶节
- 新中国第一位女导演是谁?
- kpl|北慕知道为什么KPL不要他!易瞳巅峰赛随便第一,却打不了职业
