欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql之全球化和本地化:字符集、校对集、中文编码问题

程序员文章站 2022-03-14 18:43:00
本文内容: 什么是字符集?什么是校对集? 查看字符集和校对集 设置字符集和校对集 mysql中的中文数据问题 首发日期:2018-04-19 什么是字符集?什么是校对集? 字符集是字母和符号的集合,每一个字符编码都由字符集决定。 校对集是字母和符号的校对标准。校对集影响着字符的排序和搜索。 查看字符... ......


本文内容:

 

  • 什么是字符集?什么是校对集?
  • 查看字符集和校对集
  • 设置字符集和校对集
  • mysql中的中文数据问题

 

首发日期:2018-04-19


什么是字符集?什么是校对集?

 

  • 字符集是字母和符号的集合,每一个字符编码都由字符集决定。
  • 校对集是字母和符号的校对标准。校对集影响着字符的排序和搜索。

 

 


查看字符集和校对集:

 

  • 查看mysql支持的字符集:show character set;
    • mysql之全球化和本地化:字符集、校对集、中文编码问题
  • 查看mysql支持的校对集:show collation;
    • mysql之全球化和本地化:字符集、校对集、中文编码问题
  • 查看服务端默认的字符集:show variables like 'char%';
    • mysql之全球化和本地化:字符集、校对集、中文编码问题
  • 查看服务端默认的字符集:show variables like 'collation%';
    • mysql之全球化和本地化:字符集、校对集、中文编码问题

 

 

 

服务端默认的字符集的意义:

mysql之全球化和本地化:字符集、校对集、中文编码问题

服务端默认的校对集的意义:

mysql之全球化和本地化:字符集、校对集、中文编码问题

 


设置字符集和校对集

 

设置数据库数据表的字符集:

  • 实际上,字符集很少是服务器范围(甚至数据库范围)的设置。不同的表,甚至不同的列都可能需要不同的字符集,而且两者都可以在创建表时指定【语出mysql必知必会】。下面介绍不使用默认配置来创建数据库、数据表
    • 创建数据库:create database 数据库名 charset 字符集 collate 校对集;【校对集并不是必要的,每一个字符集都有默认的校对集,如果没有校对集将使用默认的】
      • mysql之全球化和本地化:字符集、校对集、中文编码问题
    • 创建数据表:create table 表名 charset 字符集 collate 校对集;
      • mysql之全球化和本地化:字符集、校对集、中文编码问题
    • 给某一列指定字符集和校对集:mysql之全球化和本地化:字符集、校对集、中文编码问题

 

 

设置服务端和客户端的字符集:

  • 语法:set character_set_xxx =字符集; 【character_set_xxx是上面查看字符集中的服务端的各个默认字符集,意义在上面已经标上了】【这种设置是会话级的,仅在当次连接生效。】
  • 如果想要永久修改服务端的字符集:windows下修改my.ini文件【就是mysql的配置文件,可以从mysql服务中查看mysql之全球化和本地化:字符集、校对集、中文编码问题在哪】,在mysqld中将character-set-server的值修改为指定的字符集【修改的是服务端的字符集】

 

补充:

  • 不可永久配置服务端认为客户端的字符集,每一个连接过来的客户端的字符集都是不确定的,应该由客户端设置当次连接的字符集来指定字符集。

 


mysql中的中文数据问题:

 

  • mysql中的中文数据问题本质上还是字符集问题,想要识别和存储中文数据,必须设置能编码中文的字符集。
  • gbk和utf8都是支持mysql的,一般都是将mysql的字符集更改成utf8来识别中文。
  • 如何配置(以gbk为例):
    • 首先要考虑的一个是:如果你使用命令行模式,默认情况下字符的编码格式是gbk的,也就是说客户端的数据编码是gbk的;
    • 如果服务端要识别客户端传来的中文,那么需要设置服务端认为客户端的字符集为gbk;set character_set_client ='gbk';
    • 如果服务端要返回中文给客户端,需要将服务端返回给客户端的数据的字符集设置为gbk;set character_set_results ='gbk';
    • 对于单次会话,可以直接使用set names = 'gbk';【执行set names= 'gbk'就是把character_set_client、character_set_connection、character_set_results这3个参数值都设为gbk】