前言
在使用MySQL的过程中,可能会出现初始设计使用的字符集或Collation不符合当前需求的情况。如使用utf8的表(MySQL中的utf8即utf8mb3)要支持emoji,而utf8mb3不支持emoji(emoji需要4个字节,而utf8mb3最长只支持3个字节),所以需要将字符集修改为utf8mb4。

Collation即排列字符集,每个字符集都有对应一个或多个排列字符集。如某列使用utf8mb4_unicode_ci,当需要使用emoji搜索的时候,因为utf8mb4_unicode_ci可替换字符的原因,就可能出现查找出错误数据的结果。

真实事例
在公司项目中有个需要生成唯一emoji序列的需求。开发过程中没发现问题,在测试的过程中出现了因为重复插入失败的情况,但是在插入前已经查询过数据库没有发现有重复。为确认是否是程序的问题,直接通过prisma插入一个不存在的序列,但是还是出现了插入失败的情况。查询了数据库中该表的结构,发现使用的字符集是utf8mb4,确认了是支持emoji的。在纠结了快半天的时间后,发现了该列的排列字符集为utf8mb4_unicode_ci,该排列字符集会认为一些特定的emoji是可替代的导致了这个问题,在将该列的Collation修改为utf8mb4_bin后解决了问题。

获取当前支持的全部字符集及Collation
MySQL提供了SHOW CHARACTER SET命令查看当前所有的字符集,同时也提供了SHOW COLLATION命令查看所以的Collation。同时,MySQL也提供了SHOW CHARACTER SET LIKE 'charset-name'和SHOW COLLATION WHERE Charset = 'charset-name'查看指定字符集和指定字符集的所有排列字符集的信息。

-- 查看所有字符集信息
SHOW CHARACTER SET;
-- 查看utf8字符集信息
SHOW CHARACTER SET LIKE 'utf8';

-- 查看所有排列字符集
SHOW COLLATION;
-- 查看utf8的所有排列字符集
SHOW COLLATION WHERE Charset = 'utf8';
在MySQL中,全部的字符集与排列字符集的信息都存放在information_schema库中。除上述方法外,还可进入information_schema库中查看CHARACTER_SETS与COLLATIONS表。

USE information_schema;
-- 查看所有字符集信息
SELECT * FROM CHARACTER_SETS;
-- 查看所有排列字符集信息
SELECT * FROM COLLATIONS;
在运行MySQL Server时,也可以使用—-character-set-server=charset-name及—-collation-server=collation-name参数指定服务器默认的字符集及Collation。

$ mysqld —-character-set-server=utf8mb4 —-collation-server=utf8mb4_bin
数据库级
查询全部数据库字符集
与上节中所说的字符集与排列字符集的信息都存放在information_schema库中相同,各个库、表、列的信息也都存放在其中。要查询所有库的信息,只需查询information_schema库中的SCHEMATA表即可得到。SCHEMATA表中包括了CATALOG_NAME、SCHEMA_NAME、DEFAULT_CHARACTER_SET_NAME、DEFAULT_COLLATION_NAME及SQL_PATH五个字段,其中DEFAULT_CHARACTER_SET_NAME与DEFAULT_COLLATION_NAME就是我们需要的字符集与排列字符集信息。

SELECT SCHEMA_NAME 'database', DEFAULT_CHARACTER_SET_NAME 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
查询并修改指定数据库的字符集及Collation
查询指定数据库时,可以在上节查询全部数据库的基础上增加SCHEMA_NAME = 'database-name'的条件即可。

SELECT DEFAULT_CHARACTER_SET_NAME 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = ‘database-name’;
除上述方法外,还可进入指定数据库后,查看@@character_set_database与@@collation_database两个变量分别查询该数据库的字符集与排列字符集。两种方式的区别为第一种可在任意数据库中查询所有库的信息,而第二种只能查询当前库。

USE database-name;
对于库的操作除了查询外,还可修改该库的字符集与排列字符集。通过ALTER DATABASE语句就可以对数据库进行修改,修改时可以指定库的字符集,以及排列字符集。需要注意的是,修改库的字符集不带上COLLATE指定排列字符集,将会设置排列字符集为字符集的默认排列字符集。而直接使用COLLATE不指定字符集,会自动将字符集修改为排列字符集对应的字符集。

ALTER DATABASE database-name CHARACTER SET charset-name COLLATE collation-name;
数据库表级
查询全部表
MySQL提供了SHOW TABLES STATUS命令,可以查询数据库中表的全部信息。也可使用上文中的方法,直接在information_schema库中查询TABLES表。TBALES中包括了数据库服务器中所有的库的表信息,为了查询指定库的表信息,可通过TABLE_SCHEMA字段进行库名筛选。

-- 直接查询information_schema中的数据
SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'table-name';
-- 在指定库中查询表的信息
USE database-name;
SHOW TABLES STATUS;
查询及修改指定表
数据库全部信息都存放于information_schema表中,可通过该表直接查询所有库、表、列的信息。但该库需要较高的安全性限制防止被恶意更改,下文中也将不继续介绍直接通过该库操作的方式。查询库中指定表的方式与查询全部表相同,只需添加对应的限制条件即可。

USE database-name;
SHOW TABLE STATUS WHERE NAME LIKE 'table-name';
修改表的字符集的方式与修改库相同,只需将修改库字符集的语句中的DATABASE修改为TABLE即可。

ALTER TABLE table-name CHARACTER SET charset-name COLLATE collation-name;
列级
全部列
在指定的库中,使用SHOW FULL COLUMNS FROM table-name语句即可查询表中所有列的信息。

USE database-name;
SHOW FULL COLUMNS FROM table-name;
指定列
为了查询指定列的信息,可以在上述语句中添加限制Field字段的条件。

SHOW FULL COLUMNS FROM table-name WHERE Field = 'column-name'
修改列信息的语句于上述两者略有不同,它需要在语句中指出修改的表的指定列。并且需要指定该列的类型,即使不对其进行修改。

ALTER TABLE table-name MODIFY column-name column-type CHARACTER SET charset-name COLLATE collation-name;

程序员工具站点:草根工具www.idevtool.com

个人笔记站点:草根笔记note.idevtool.com

MySQL查看、修改字符集及Collation的更多相关文章

  1. MySQL 查看修改字符集

    查看MYSQL数据库服务器和数据库字符集 方法一:show variables like '%character%'; 方法二:show variables like 'collation%'; sh ...

  2. mysql查看修改字符集

    1.列出MYSQL支持的所有字符集: SHOW CHARACTER SET; 2.当前MYSQL服务器字符集设置 SHOW VARIABLES LIKE 'character_set_%'; 3.当前 ...

  3. MySQL 如何修改字符集 utf8 改为 utf8mb4

    在实行sql server 向 mysql 迁移数据时,报错: Incorrect string value: '\xF0\x9F\x98\x8A' 原因是mysql 采用的是 utf8 的字符集,而 ...

  4. MySQL查看修改存储引擎总结

    文总结了MySQL下查看.修改存储引擎的一些方法.测试.验证环境为MySQL 5.6 1:查看MySQL的存储引擎信息 1.1 使用show engines命令. .csharpcode, .csha ...

  5. MySQL数据库修改字符集为UTF-8

    需要修改my.ini [client]下添加 default_character_set = utf8 [mysql]下添加 default_character_set = utf8 [mysqld] ...

  6. mysql查看修改参数

    1.查看参数 show variables like '%timeout%'; 2.修改参数 会话级别修改: set session innodb_lock_wait_timeout=50; 对当前会 ...

  7. MySQL批量修改字符集

    统一将字符字符集变成utf8_general_ci,已测试. DROP PROCEDURE IF EXISTS `chanageCharSet`; CREATE PROCEDURE `chanageC ...

  8. MySql查看修改l时区

    # 查看时区 show variables like '%time_zone%'; # 设置全局 set global time_zone='+8:00';  # 设置当前会话 set time_zo ...

  9. mysql服务器的字符集

    文章:http://www.cnblogs.com/fantiantian/p/3468454.html 的评论中有这样的文字: 谢谢沧海一滴的总结 在Linux中一般都是UTF-8字符集.我们在建数 ...

  10. 查看修改MySQL字符集

    查看修改MySQL字符集 http://blog.sina.com.cn/s/blog_70ac6bec01016fts.html 查看修改MySQL字符集 (2012-08-22 09:53:21) ...

随机推荐

  1. Nuxt.js 应用中的 webpack:compile 事件钩子

    title: Nuxt.js 应用中的 webpack:compile 事件钩子 date: 2024/11/22 updated: 2024/11/22 author: cmdragon excer ...

  2. app&小程序&web安全—sign签名绕过

    零.前言 在web界面登陆时,小程序和app传输数据时经常会碰到签名,会对请求的参数进行签名,如果自己修改了数据包就会校验失败非常麻烦. 本文编写的契机就是因为碰到了一个JeecgBoot的小程序, ...

  3. golang配置读取值viper

    viper简介 Viper是Go应用程序的完整配置解决方案,包括12-Factor应用程序.它旨在在应用程序中工作,并且可以处理所有类型的配置需求和格式.它支持: 设置默认值 从JSON.TOML.Y ...

  4. Linux之buffer/cache

    buffers和cached解释 =========================================================缓存(cached)是把读取过的数据保存起来,重新读 ...

  5. PowerShell 重命名文件夹及删除空文件夹

    数据来源 $urldata 中的倒数第2列(子文件夹名称列)包含 /.\ 等特殊字符 某个文件夹重命名脚本 foreach ($i in 0..100) { # 提取路径部分 $basePath = ...

  6. 【项目学习】Pendle 项目的简单调研

    项目介绍 将 1 ETH 质押成 1 stETH,年利率为 5%,那么到期后 1 stETH 就能收回 1 ETH(本金)+ 0.05 ETH(收益).而 Pendle 所做的就是把 1 stETH ...

  7. 语音转文字-Microsoft Azure Speech Service与Web Speech API实战

    简介 在现代技术驱动的世界中,语音识别已成为人机交互的重要方式.Microsoft Azure Speech Service 提供了强大的语音转文本功能,允许开发者轻松地将语音数据转换为文本.本文将指 ...

  8. Taro微信小程序获取Tab页可视区域高度

    前情 公司有自己的小程序项目,因公司主要技术栈为react,所以选择了Taro来开发,Taro是京东出品的多端统一开发解决方案,用来开发小程序也相比用原生开发,在开发体验上好很多,而且还能使用成熟的R ...

  9. Chats 开发指南

    Chats 开发指南 欢迎使用 Chats!在我上一篇博客 https://www.cnblogs.com/sdcb/p/18597030/sdcb-chats-intro 中,我介绍了 Chats ...

  10. windows安装gitbook并部署发布到openEuler欧拉服务器

    1. 安装nodejs10 下载安装nvm https://github.com/coreybutler/nvm-windows/releases/download/1.1.9/nvm-setup.e ...