Mysql 字符编码

Wesley13
• 阅读 670

知识补充:数据库字符编码

一、MySQL支持的字符集
1.查看所有可用的字符集
show character set;
或者查看information_schema.character_sets,也可以显示所有的字符集和该字符集默认的校队规则
2.MySQL的字符集包括字符集(character)和校对规则(collation)两个概念。
1)字符集用来定义MySQL存储字符串的方式
2)校对规则用来定义 字符串比较的方式
3)字符集和校对规则是一对多的关系,一个字符集有多个校对规则供你选择!
校对规则命名约定:它们以相关的字符集名开始,通常包括一个语言名,并且以
_ci(忽略大小写)、
_cs(大小写敏感)或者
_bin(二元,即比较是基于字符编码的值而与language无关)结束。
查看字符集的校对规则:
show collation like '字符集前缀%';
二、MySQL内部的字符集和校对规则设置
1.服务器字符集和校对规则设置
暂时了解一下即可
2.数据库字符集和校对规则设置
CREATE DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
查看当前数据库的字符集和校对规则:
show variables like 'character_set_database';
show variables like 'collation_database';
ALTER DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
3.表字符集和校对规则设置
CREATE TABLE tbl_name (column_list)
[DEFAULT CHARACTER SET charset_name [COLLATE collation_name]]

ALTER TABLE tbl_name
[DEFAULT CHARACTER SET charset_name] [COLLATE collation_name]
4.字段(列)字符集和校对规则
遇到这种情况概率比较小,这只是MySQL提供给我们一个灵活设置的手段
三、MySQL连接字符集设置
过程中要设置正确,诚实守信,这样子如果全部设置正常,服务器端会自动的去按照你设置的字符集转换,但是也要避免想换转换的过程,最好都设置成一样的编码!
连接字符集设置:客户端和服务器之间交互的字符集
1.对于客户端和服务器段的交互操作,MySQL提供了3个不同的参数:
1)character_set_client:客户端来源数据使用的字符集
2)character_set_connection:连接层字符集
3)character_set_results:返回结果字符集
知识拓展:数据在客户端和服务器之间交互的过程中字符集转换的大概过程

  1. MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;
  2. 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,内部操作字符集的确定方法如下:
    1>使用每个数据字段设定的字符集;
    2>若上述值不存在,则使用对应数据表设定的字符集;
    3>若上述值不存在,则使用对应数据库设定的字符集;
    4>若上述值不存在,则使用服务器设定的字符集。
  3. 将操作结果从内部操作字符集转换为character_set_results。
    这3个参数设定的字符集应该相同,并且客户端使用的字符集确实是参数character_set_client的值,才可以确保用户的数据可以正确的返回且输出。
    查看当前设置:show variables like 'character_set%';
    修改:
    set names 字符集,可以同时修改3个参数的值,对本次有效
    也可以在配置文件中设置:
    [mysql]
    default-character-set=字符集
    修改CMD命令行字符集:
    chcp 65001 #换成utf-8代码页(设置为utf-8之后最好手动修改显示字体 )
    chcp 936 #换成默认的gbk

客户端使用字符,连接层使用的字符集,内部使用的字符集,返回使用的字符集,最好都设置层一样的,并且客户端使用的字符集确实是character_set_client参数的值,这样就绝对不会出现问题!

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java 字符编码
1.字符集编码<br/    JDK1.6APi中提供的字符串构造方法有指定编码字符集和系统默认编码字符集两类。对于指定编码字符集来说,很好理解。默认编码字符集中描述如下:    ConstructsanewStringbydecodingthespecifiedarrayofbytesusingtheplatform's
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
mysql修改表、字段、库的字符集_无需整理
修改数据库字符集:ALTERDATABASEdb\_nameDEFAULTCHARACTERSETcharacter\_name\COLLATE...\;把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集:ALTERTABLEtbl\_nameCONVERTTOCHARA
Wesley13 Wesley13
3年前
MySQL字符集小结
一:什么是字符集字符集支持多层面:服务器层(server)、数据库层(database)、数据表(table)、字段(column)、连接(connect)、结果集(result)。1.字符集是一套符号和编码规则,字符串必须有相应的字符集。2.校验集是这套符号和编码的校验规则,定义字符排序规则,字符串之间比较的规则。3.非ASCII字
Wesley13 Wesley13
3年前
MySQL字符集
一、字符集和校验规则字符集是一套符号和编码,校验规则(collation)是在字符集内用于比较字符的一套规则,即字符集的排序规则。MySQL可以使用多种字符集和检验规则来组织字符。MySQL服务器可以支持多种字符集,在同一台服务器,同一个数据库,甚至同一个表的不同字段都可以指定使用不同的字符集,相比oracle等其他数据库管理系
Wesley13 Wesley13
3年前
MySQL 默认字符集
MySQL默认的字符集是latin1,通常跟我们的中文会打架,导致读写异常或乱码,而我们需要的字符集是utf8.MySQL字符集的查看mysqlshowvariableslike'%character%';
Wesley13 Wesley13
3年前
MySQL原理
任何计算机存储数据,都需要字符集,因为计算机存储的数据其实都是二进制编码,将一个个字符,映射到对应的二进制编码的这个映射就是字符编码(字符集)。这些字符如何排序呢?决定字符排序的规则就是排序规则。查看内置字符集与比较规则通过showcharset;命令,可以查看所有的字符集。以下仅展示了我们常用的字符