精华内容
下载资源
问答
  • MySQL字符集

    千次阅读 2019-06-30 21:27:10
    mysql字符集基础知识 1.什么叫字符集?常用的字符集的分类? 字符集就是字符和编码的集合,常用的中文字符集是gbk,英文字符集是ASCII 多种字符在一个字符集里,常用的UTF8 2.数据库存取数据与字符集的关系 数据库...

    mysql字符集基础知识

    1.什么叫字符集?常用的字符集的分类?
    字符集就是字符和编码的集合,常用的中文字符集是gbk,英文字符集是ASCII
    多种字符在一个字符集里,常用的UTF8

    2.数据库存取数据与字符集的关系
    数据库在存取数据时,会在字符集中寻找各个字符对应的编码,然后存取编码

    3.操作系统查看字符集的种类
    windows 使用chcp命令查看,查看到是936,说明是中文字符集
    在这里插入图片描述linux 使用cat /etc/sysconfig/i18n #当前是utf8字符集在这里插入图片描述4.在linux中编码和字符的关系,以ASCII字符集为例
    mysql> select ascii(‘a’); ##查看在ASCII中字符a对应的编码
    ±-----------+
    | ascii(‘a’) |
    ±-----------+
    | 97 | ##在ascii中,字符a对应的编码是97
    ±-----------+
    1 row in set (0.01 sec)

    mysql> select ascii(‘x’);
    ±-----------+
    | ascii(‘x’) |
    ±-----------+
    | 120 |
    ±-----------+
    1 row in set (0.00 sec)

    mysql> select ascii(‘1’);
    ±-----------+
    | ascii(‘1’) |
    ±-----------+
    | 49 | ##字符1对应的编码是49
    ±-----------+
    1 row in set (0.00 sec)

    5.mysql内部存储字符集的相关知识

    1)mysql内部存储字符集有4种。分别是服务器字符集,数据库字符集,表字符集,列字符集,他们的优先级顺序是列字符集 > 表字符集 > 数据库字符集 > 数据库字符集,因为数据最终存放在列上。我们常用的字符集是数据库字符集和表字符集,服务器级别一般忽略
    如果列的字符集没有设置,那么列的字符集就会继承表的字符集

    2)mysql> show character set; ##查看数据库级别中有哪些字符集

    mysql> show variables like ‘%character%’;  ##可以查看到服务器级别(character_set_server)是什么字符集,一  般忽略!
    
    mysql>show create database test;    ##可以查看到test数据库是什么字符集
    

    3)在创建数据库(database)的时候可以指定该数据库是哪个字符集,同样在新建表(table)也可以指定是哪个字符集
    EX: mysql> create table t20(name varchar(10)) character set gbk;
    Query OK, 0 rows affected (0.06 sec)
    ##创建t20表,指定为gbk字符集
    mysql>show create table t20;
    ##可以查看到t20表是哪个字符集

    同样的新建列时也可以指定是哪个字符集
    mysql> create table t21(name varchar(10) character set big5); ##新建t21表,表里有name列,name列上是big5字符集
    Query OK, 0 rows affected (0.05 sec)

    mysql> show create table t21; ##查看t21表中的信息,可以看到列的字符集
    ±------±-----------------------------------------------------------------------------------------------------------------+
    | Table | Create Table |
    ±------±-----------------------------------------------------------------------------------------------------------------+
    | t21 | CREATE TABLE t21 (
    name varchar(10) CHARACTER SET big5 DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
    ±------±-----------------------------------------------------------------------------------------------------------------+

    mysql字符集综合解惑以及最佳实践

    mysql> show variables like ‘%character%’;
    ±-------------------------±---------------------------------+
    | Variable_name | Value |
    ±-------------------------±---------------------------------+
    | character_set_client | utf8 |
    | character_set_connection | utf8 |
    | character_set_database | latin1 |
    | character_set_filesystem | binary |
    | character_set_results | utf8 |
    | character_set_server | latin1 |
    | character_set_system | utf8 |
    | character_sets_dir | /usr/local/mysql/share/charsets/ |
    ±-------------------------±---------------------------------+

    上方标蓝字符集的关系图
    在这里插入图片描述详解

    1. character_set_client必须能够正确反映mysql客户端(MySQL Client)的字符集是什么,换句话说,也就是 character_set_client参数和mysql客户端的字符集是一样的
      2.character_set_connection一般和character_set_client参数是一样的
      3.MySQL server中的内部操作字符集就是服务器,数据库,表,列四类级别的字符集
      4.character_set_results 关系到返回的结果

    各类字符集关系详解
    1.客户端连接服务端,客户端在往服务端传输数据时,数据只能以数字形式传输,所以在传输之前会对数据进行编码
    假如在客户端执行insert into t20(name) values(‘你好’);【命令释义:往t20表中的name列插入你好】。
    ‘你好’被进行了编码 假设被编成9190和9133

    2.mysql服务端接到你输入的SQL语句以后,发现里面有字符,他会在发送之前做以下事情
    1)发现是insert命令
    2)发现t20表中的name列的数据类型是varchar,varchar里面存放的是字符,字符就需要编码
    3)找到‘你好’对应的编码‘9190 ,9193’
    4)找到对应编码以后,客户端会通过character_set_client参数告诉服务端自己的编码方式
    补充:可以通过status查看客户端的编码方式

    Client characterset一定要正确的反映客户端的编码方式

    注:
    1)存数据即客户端执行插入等语句时:
    如果客户端的character_set_client对应的编码方式与服务器端character_set_connection对应的编码方式不一致时,会发生转换;但是只能有一次转换机会,也可能发生在character_set_connection对应的编码方式与mysql内部存储字符集的编码方式不一致;如果都一致,则不会进行转换
    2)取数据即客户端向服务端读取数据时:
    服务端的character_set_connection与客户端的character_set_results,两者发生协商

    注意:存数据和取数据与服务端协商不是一个通道,存数据是与character_set_client参数有关,取数据是与character_set_results参数有关

    最佳实践举例:在这里插入图片描述d1列没有设置字符集,d2列是utf8,d1和d2列上都含有varchar数据类型的列

    当中国用户往d1列上插入数据时,不用转换,取数据时也没有发生转换,因为client,connection和d1列的字符集都是gbk

    当日本用户往d2列上插入数据时,在client和connection上没有发生转换,在d2列上发生转换,将日文的字符集转换为utf8,取数据时将utf8转换为日文字符集

    校对规则(collation)
    我们需要针对utf8字符集或其他字符集设置一个关于比较和排序的大小写是否敏感的参数,默认是都不区分大小写。

    如何设置这个参数?
    我们需要在建表时,指定collate=utf8_bin(utf8可以换成其他字符集)
    mysql> create table t2(id int,name varchar(20)) CHARACTER SET utf8 COLLATE=utf8_bin;
    ##建表和id,name列,指定为utf8字符集,并且设置参数为大小写敏感
    Query OK, 0 rows affected (0.05 sec)

    mysql> insert into t2 values(1,‘a’); #往id列中插入1,name列中插入a
    Query OK, 1 row affected (0.00 sec)

    mysql> insert into t2 values(1,‘A’);
    Query OK, 1 row affected (0.00 sec)

    mysql> insert into t2 values(1,‘B’);
    Query OK, 1 row affected (0.00 sec)

    mysql> insert into t2 values(1,‘b’);
    Query OK, 1 row affected (0.00 sec)

    mysql> select * from t2 where name=‘a’; ##查看t2列中名字叫a的列
    ±-----±-----+
    | id | name |
    ±-----±-----+
    | 1 | a |
    ±-----±-----+
    1 row in set (0.00 sec)

    比较未设置参数时
    在这里插入图片描述

    比较两种方式的排序
    在这里插入图片描述

    utf8_bin是按照字符编码的数字大小排序
    可以使用select ascii(‘字符’)查看对应的编码号
    在这里插入图片描述
    所以utf8_bin的排序方式是ABab

    综上可以看出设置utf8_bin这个参数会影响排序方式和where条件语句

    关于collation的特点
    在mysql服务器,数据库,表,列四种级别中都有collation,且优先级越来越高
    我们可以在建表时使用SET utf8 COLLATE=utf8_bin语句设置collation参数,那么collate有哪些值可以设置呢?我们可以使用show collation;查看允许设置的值。

    展开全文
  • 简要说明 字符集和校对规则 字符集是一套符号和编码。校对规则是在字符集内用于比较字符的一套规则。 MySql在collation提供较强... 字符集_语言名,utf8默认校对规则是utf8_general_ci mysql字符集和校对规则有4个级别
  • 设置mysql字符集

    2012-12-19 15:32:43
    设置mysql字符集 mysql 乱码
  • mysql字符集转换

    2012-09-18 09:11:53
    mysql 字符集 转换
  • 如何修改MySQL字符集

    千次阅读 2018-07-13 13:05:04
    修改MySQL字符集方法:如何修改MySQL字符集

    修改MySQL字符集方法:如何修改MySQL字符集

    展开全文
  • 关于MySQL字符集查看与修改; MySQL的字符集支持(Character Set Support)有两个方面:   字符集(Character set)和排序方式(Collation)。 MySQL对于字符集的支持细化到四个层次: 服务器(server),数据库(database),...
  • 查看mysql字符集MySQL 乱码的根源是的 MySQL 字符
  • linux修改mysql字符集

    2010-12-20 10:00:20
    linux修改mysql字符集 linux修改mysql字符集
  • MySQL字符集处理-个人笔记

    万次阅读 2021-07-15 15:38:51
    1.查看当前数据库字符集配置: show variables like 'character%' 2.将对应的设置成utf8mb4: SET character_set_system = utf8mb4; 3.执行: ALTER TABLE sys_robot CHANGE nick_name nick_name ...

    1.查看当前数据库字符集配置:

    show variables like 'character%'

    2.将对应的设置成utf8mb4:

     SET character_set_system = utf8mb4;

    3.执行:  

    ALTER TABLE sys_robot CHANGE nick_name nick_name VARCHAR(50) CHARACTER SET utf8mb4; 

    展开全文
  • 略懂 MySQL字符集

    千次阅读 2013-07-18 16:09:51
    MySQL 字符集
         本文虽说旨在明白、但若略懂亦可、毕竟诸葛孔明如是
         只有基于字符的值才有所谓字符集的概念
         某些字符集可能需要更多CPU、消费更多的内存和磁盘空间、甚至影响索引使用
         这还不包括令人蛋碎的乱码、
         可见、我们还是有必要花点时间略懂下MySQL字符集
         

         先直观认识各阶梯下显示使用字符集:

    # 囊括三个层级:DB、Table、Column
    
    mysql> create database d charset utf8;
    Query OK, 1 row affected (0.04 sec)
    
    mysql> create table d.t
        -> (str varchar(10) charset latin1)
        -> default charset=utf8;
    Query OK, 0 rows affected (0.05 sec)

         那如果没有显示指定?MySQL是如何设置?路分两条:
         
         ① 创建对象时的默认设置
            
            这是个逐层继承的默认设置:
            Server → DB → Table → Column
            高层为底层设置默认值、底层可遵可弃、
            没有指定字符集、谓之可遵
            显示指定字符集、谓之可弃
            
         ② 服务器和客户端通信时的设置
            
            当客户端提交一条SQL到MySQL时、MySQL Server总是假定客户端字符集是character_set_client
            其后、Server把character_set_client转为character_set_connection进行SQL处理、
            在返回结果集给客户端时、Server又将character_set_connection转为character_set_result、然后返回
            
            以上涉及的三个字符集、我们可以通过set names 一次搞定
            
         
         字符集之间的相互转换是需要额外的系统开销的、
         如何知道?
         explain extended + show warnings 即可
         
         那该如何尽量避免这种隐式转换?
         这里介绍一种被称为"极简原则"的方法、如下:
         先为服务器(或数据库)选择合适的字符集、然后依据业务、让某些列选择合适的字符集
         
         在MySQL字符集中隐含了些意外惊喜、主要有三:
         
         ① 有趣的character_set_database
            
            当character_set_database和character_set_server不同时、库的默认字符集由后者决定
            你不能直接修改csd、改变css就改变了csd、因为csd和库默认字符集相同、
            改变库默认字符集、csd就随之改变、而css决定库的默认字符集
            所以、当连接到mysql实例、又没有指定库时、默认字符集与css相同
            
         ② load data infile 
            
            进行此操作时、建议最佳实践如下:
            use 库;
            set names 字符集;
            开始加载数据;
            这就使用统一字符集、避免混搭的"字符集style"
            
         ③ select into outfile 
            
            该行为没有进行任何转码操作!
            
         
         有人说、不管37二十一、全用utf8、整个世界都清净了
         但这不仅消耗更多磁盘空间、也带来一定性能牺牲
         为什么?因为utf8是多字节字符集、比如一个汉字是三个字节
         这会带来两方面的问题:
         ① 浪费空间、如char(10)可能会开辟30字节空间、即使不需要
         ② 索引长度限制、mysql总是假定一个字符三个字节、导致最长索引长度变成1/3


         行文至此、大意已明、后续想到、再续前缘



    By WaterBin

    2013-07-18

    Good LUck

    展开全文
  • 字符集编码与MySQL 乱码初探;提纲;字符集背景知识;常见字符集逻辑关系;...MySQL字符集设置;MySQL字符集设置;MySQL字符集陷阱;乱码场景一;乱码场景二;基于复制的DDB扩容;乱码场景三;乱码场景四;乱码场景五;小结;感
  • MySQL 字符集 注意事项

    万次阅读 2021-08-13 04:18:53
    utf8_unicode_ci 与utf8_general_ci区别 utf8_unicode_ci和utf8_general_ci对中英文来说没有实质的差别。 utf8_general_ci: 校对...如果你想使用gb2312编码,那么建议你使用latin1作为数据表的默认字符集,这样就能直
  • MySQL字符集设置

    千次阅读 2018-08-11 15:29:17
    MySQL字符集设置 • 系统变量: – character_set_server:默认的内部操作字符集 – character_set_client:客户端来源数据使用的字符集 – character_set_connection:连接层字符集 – character_set_results:...
  • 1 MySQL字符集简介 MySQL服务器可以支持多种字符集,在同一台服务器,同一个数据库,甚至同一个表的不同字段都可以指定使用不同的字符集,相比oracle等其他数据库管理系统,在同一个数据库只能使用相同的字符集,...
  • 文章目录一、背景二、字符集介绍分析三、==解决办法(设置字符集为utf8mb4)==:1. 进入mysql,执行命令,直接在数据库层操作2. 修改`django`连接数据库时的字符集(setting.py文件)3.`flask/sqlalchemy`设置字符集的格式...
  • mysql 字符集设置

    千次阅读 2016-03-18 13:57:38
    一、 MySQL字符集设置 (1) 系统变量: – character_set_server:默认的内部操作字符集 – character_set_client:客户端来源数据使用的字符集 – character_set_connection:连接层字符集 – character_set...
  • MySQL字符集编码

    千次阅读 2014-08-28 00:27:29
    MySQL字符集编码总结 之前内部博客上凯哥分享了一篇关于mysql字符集的文章,之前我对mysql字符集一块基本没有深究过,看到凯哥文章后有些地方有点疑惑,遂自己去看了mysql的官方文档,并参考了凯哥的文章,总结了这篇博文...
  • MySQL 字符集不一致导致索引失效的一个真实案例

    千次阅读 多人点赞 2020-07-10 11:29:42
    MySQL 字符集不一致导致索引失效的一个真实案例,通过 explain 和 show warnings 发现索引没有被使用,而且存在字符集转换的操作。通过修改字段的字符集之后,解决了慢查询的性能问题。
  • 查看 MySQL 字符集的方法

    万次阅读 2019-06-24 17:52:17
    1 MySQL字符集设置 系统变量: – character_set_server:默认的内部操作字符集 – character_set_client:客户端来源数据使用的字符集 – character_set_connection:连接层字符集 – character_set_results:...
  • Mysql字符集问题

    千次阅读 2013-07-19 16:47:25
    在使用Mysql数据库过程中,...在编写操作Mysql数据库代码时,有以下几种方式可以设置Mysql字符集:   1、 mysql_options(pMySql, MYSQL_SET_CHARSET_NAME, "gb2312"); 2、 mysql_query(pSQL,"SET CHARACTER SE
  • Linux下修改MySQL字符集

    2015-03-05 14:25:19
    Linux下修改MySQL字符集 1.查找MySQL的cnf文件的位置 find / -iname '*.cnf' -print /usr/share/mysql/my-innodb-heavy-4G.cnf /usr/share/mysql/my-large.cnf /usr/share/mysql/my-small.cnf /usr/share/mysql/...
  • MYSQL字符集与校对规则

    千次阅读 2017-06-04 23:49:55
    MYSQL字符集与校对规则一. 字符集与校队规则概述简单的说字符集就是一套文字符号及编码、比较规则的集合。 目前支持中文的常用的字符集有UTF-8、GBK、GB2312等,MYSQL服务器支持多种字符集,在同一台服务器、同一个...
  • 设定mysql字符集解决终端乱码设定mysql字符集解决终端乱码
  • 查看MySQL字符集的方法

    千次阅读 2017-12-24 20:32:18
    查看MySQL字符集的方法查看MySQL数据库服务器和数据库MySQL字符集mysql> show variables like '%char%'; +--------------------------+-------------------------------------+------ | Variable_name | Value
  • 修改mysql字符集为utf8mb4

    千次阅读 2019-01-18 18:19:45
    修改mysql字符集为utf8mb4 要求MySQL版本>= 5.5.3 查看字符集 查看MYSQL数据库服务器和数据库字符集 方法一:show variables like '%character%'; 方法二:show variables like 'collation...
  • [mysql][ MySQL字符集设置及字符转换]

    千次阅读 2018-04-03 14:13:37
    [mysql][ MySQL字符集设置及字符转换] 标签(空格分隔): 未分类 在生成环境中,会经常碰到Mysql字符的设置问题,CU很多牛人都说过N次了,个人也总结下。 如果在应用开始阶段没有正确的设置字符集,在运行一段...
  • MySQL字符集 GBK、GB2312、UTF8区别 解决MYSQL中文乱码问题   MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下所采用的。 character-set-database:数据库字符集...
  • MySQL 字符集说明以及字符集错误恢复 实验环境centos7以上版本(不会的看我以前的教程) mysql5.7 (我带你快速装一次用yum装) 首先安装mysql 注:mysql-5.7.tar.gz 中包括了安装 mysql5.7 主要的软件包。 这样部署...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 225,223
精华内容 90,089
关键字:

mysql字符集

mysql 订阅