MySQL字符集专题(字符集,校对,乱码)

MySQL 字符集和校对集 文章目录字符集字符集概念MySQL字符集乱码问题解决字符集设置原理总结校对集校对集概念校对集设置校对集应用总结 字符集 目标:了解字符集的概念,掌握MySQL数据库存储数据的字符集逻辑以及设置方式 字符集概念 MySQL字符集关系 解决乱码问题 字符集设置原理 字符集概念 字符集:charset或者character set,是各种文字和符号在计算机中的总称 字符集根据不同国家的符号不同,有不同的字符集 不同的字符集占用的存储空间不一样,存储的底层也不一样 不同字符集之间可以进行转换 常见字符集 阅读详情

1 MySQL字符集简介

    MySQL服务器可以支持多种字符集,在同一台服务器,同一个数据库,甚至同一个表的不同字段都可以指定使用不同的字符集,相比Oracle等其他数据库管理系统,在同一个数据库只能使用相同的字符集,MySQL明显存在更大的灵活性。
    MySQL的字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念。字符集是用来定义MySQL存储字符串的方式,校对规则则是定义了比较字符串的方式,解决排序和字符分组的问题。字符集和校对规则是一对多的关系,每个字符集至少对应一个校对规则,MySQL支持39种字符集的将近200种校对规则。

    在MySQL中,字符集的概念和编码方案被看做是同义词,一个字符集是一个转换表和一个编码方案的组合。

    Unicode(Universal Code)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode存在不同的编码方案,包括Utf-8,Utf-16和Utf-32。Utf表示Unicode Transformation Format。

2 查看字符集及校对

    2.1 查看所有字符集

[sql]  view plain  copy
  1. mysql> show character set;  
  2. mysql> select *  from information_schema.character_sets;  
  3. mysql> select character_set_name, default_collate_name, description, maxlen  from information_schema.character_sets;  
    输出结果如下

[sql]  view plain  copy
  1. +----------+-----------------------------+---------------------+--------+  
  2. | Charset  | Description                 | Default collation   | Maxlen |  
  3. +----------+-----------------------------+---------------------+--------+  
  4. | big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 |  
  5. | dec8     | DEC West European           | dec8_swedish_ci     |      1 |  
  6. | cp850    | DOS West European           | cp850_general_ci    |      1 |  
  7. | hp8      | HP West European            | hp8_english_ci      |      1 |  
  8. | koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 |  
  9. | latin1   | cp1252 West European        | latin1_swedish_ci   |      1 |  
  10. | latin2   | ISO 8859-2 Central European | latin2_general_ci   |      1 |  
  11. | swe7     | 7bit Swedish                | swe7_swedish_ci     |      1 |  
  12. | ascii    | US ASCII                    | ascii_general_ci    |      1 |  
  13. | ujis     | EUC-JP Japanese             | ujis_japanese_ci    |      3 |  
  14. | sjis     | Shift-JIS Japanese          | sjis_japanese_ci    |      2 |  
  15. | hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   |      1 |  
  16. | tis620   | TIS620 Thai                 | tis620_thai_ci      |      1 |  
  17. | euckr    | EUC-KR Korean               | euckr_korean_ci     |      2 |  
  18. | koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    |      1 |  
  19. | gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   |      2 |  
  20. | greek    | ISO 8859-7 Greek            | greek_general_ci    |      1 |  
  21. | cp1250   | Windows Central European    | cp1250_general_ci   |      1 |  
  22. | gbk      | GBK Simplified Chinese      | gbk_chinese_ci      |      2 |  
  23. | latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   |      1 |  
  24. | armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci |      1 |  
  25. | utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 |  
  26. | ucs2     | UCS-2 Unicode               | ucs2_general_ci     |      2 |  
  27. | cp866    | DOS Russian                 | cp866_general_ci    |      1 |  
  28. | keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  |      1 |  
  29. | macce    | Mac Central European        | macce_general_ci    |      1 |  
  30. | macroman | Mac West European           | macroman_general_ci |      1 |  
  31. | cp852    | DOS Central European        | cp852_general_ci    |      1 |  
  32. | latin7   | ISO 8859-13 Baltic          | latin7_general_ci   |      1 |  
  33. | utf8mb4  | UTF-8 Unicode               | utf8mb4_general_ci  |      4 |  
  34. | cp1251   | Windows Cyrillic            | cp1251_general_ci   |      1 |  
  35. | utf16    | UTF-16 Unicode              | utf16_general_ci    |      4 |  
  36. | cp1256   | Windows Arabic              | cp1256_general_ci   |      1 |  
  37. | cp1257   | Windows Baltic              | cp1257_general_ci   |      1 |  
  38. | utf32    | UTF-32 Unicode              | utf32_general_ci    |      4 |  
  39. | binary   | Binary pseudo charset       | binary              |      1 |  
  40. | geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  |      1 |  
  41. | cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   |      2 |  
  42. | eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci |      3 |  
  43. +----------+-----------------------------+---------------------+--------+  

    其中:

    Charset:字符集名字。

    Description:对每个字符集的简短描述。

    Default collation:每个字符集的默认校对。

    Maxlen:每个字符集所保留的最大字节数。

    2.2 查看字符集可用的校对,如uft8

[sql]  view plain  copy
  1. mysql> show collation like 'utf8%';  
  2. mysql> select * from information_schema.collations where collation_name like 'utf8%';  
    输出结果如下

[sql]  view plain  copy
  1. +--------------------------+--------------------+-----+------------+-------------+---------+  
  2. | COLLATION_NAME           | CHARACTER_SET_NAME | ID  | IS_DEFAULT | IS_COMPILED | SORTLEN |  
  3. +--------------------------+--------------------+-----+------------+-------------+---------+  
  4. | utf8_general_ci          | utf8               |  33 | Yes        | Yes         |       1 |  
  5. | utf8_bin                 | utf8               |  83 |            | Yes         |       1 |  
  6. | utf8_unicode_ci          | utf8               | 192 |            | Yes         |       8 |  
  7. | utf8_icelandic_ci        | utf8               | 193 |            | Yes         |       8 |  
  8. | utf8_latvian_ci          | utf8               | 194 |            | Yes         |       8 |  
  9. | utf8_romanian_ci         | utf8               | 195 |            | Yes         |       8 |  
  10. | utf8_slovenian_ci        | utf8               | 196 |            | Yes         |       8 |  
  11. | utf8_polish_ci           | utf8               | 197 |            | Yes         |       8 |  
  12. | utf8_estonian_ci         | utf8               | 198 |            | Yes         |       8 |  
  13. | utf8_spanish_ci          | utf8               | 199 |            | Yes         |       8 |  
  14. | utf8_swedish_ci          | utf8               | 200 |            | Yes         |       8 |  
  15. | utf8_turkish_ci          | utf8               | 201 |            | Yes         |       8 |  
  16. | utf8_czech_ci            | utf8               | 202 |            | Yes         |       8 |  
  17. | utf8_danish_ci           | utf8               | 203 |            | Yes         |       8 |  
  18. | utf8_lithuanian_ci       | utf8               | 204 |            | Yes         |       8 |  
  19. | utf8_slovak_ci           | utf8               | 205 |            | Yes         |       8 |  
  20. | utf8_spanish2_ci         | utf8               | 206 |            | Yes         |       8 |  
  21. | utf8_roman_ci            | utf8               | 207 |            | Yes         |       8 |  
  22. | utf8_persian_ci          | utf8               | 208 |            | Yes         |       8 |  
  23. | utf8_esperanto_ci        | utf8               | 209 |            | Yes         |       8 |  
  24. | utf8_hungarian_ci        | utf8               | 210 |            | Yes         |       8 |  
  25. | utf8_sinhala_ci          | utf8               | 211 |            | Yes         |       8 |  
  26. | utf8_general_mysql500_ci | utf8               | 223 |            | Yes         |       1 |  
  27. +--------------------------+--------------------+-----+------------+-------------+---------+  
    COLLATION_NAME:可使用的校对名字
    CHARACTER_SET_NAME:校对所属的字符集的名字
    ID:唯一的顺序号码
    IS_DEFAULT:表示校对是否这个字符集的默认校对
    IS_COMPILED:
    SORTLEN :

    2.3 查看当前数据库字符集

[sql]  view plain  copy
  1. mysql> show variables like 'character%';  
    输出结果如下

[sql]  view plain  copy
  1. +--------------------------+----------------------------------+  
  2. | Variable_name            | Value                            |  
  3. +--------------------------+----------------------------------+  
  4. | character_set_client     | utf8                             |  
  5. | character_set_connection | utf8                             |  
  6. | character_set_database   | utf8                             |  
  7. | character_set_filesystem | binary                           |  
  8. | character_set_results    | utf8                             |  
  9. | character_set_server     | latin1                           |  
  10. | character_set_system     | utf8                             |  
  11. | character_sets_dir       | /usr/local/mysql/share/charsets/ |  
  12. +--------------------------+----------------------------------+  
    名词解释:

    character_set_client:客户端请求数据的字符集
    character_set_connection:客户机/服务器连接的字符集
    character_set_database:默认数据库的字符集,无论默认数据库如何改变,都是这个字符集;如果没有默认数据库,那就使用 character_set_server指定的字符集,这个变量建议由系统自己管理,不要人为定义。
    character_set_filesystem:把os上文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的
    character_set_results:结果集,返回给客户端的字符集
    character_set_server:数据库服务器的默认字符集
    character_set_system:系统字符集,这个值总是utf8,不需要设置。这个字符集用于数据库对象(如表和列)的名字,也用于存储在目录表中的函数的名字。

    2.4 查看当前数据库字符集校对

[sql]  view plain  copy
  1. mysql> show variables like 'collation%';  
  2. +----------------------+-------------------+  
  3. | Variable_name        | Value             |  
  4. +----------------------+-------------------+  
  5. | collation_connection | utf8_general_ci   |  
  6. | collation_database   | utf8_general_ci   |  
  7. | collation_server     | latin1_swedish_ci |  
  8. +----------------------+-------------------+  
    名词解释:

    collation_connection 当前连接的字符集。
    collation_database    当前日期的默认校对。每次用USE语句来“跳转”到另一个数据库的时候,这个变量的值就会改变。如果没有当前数据库,这个变量的值就是collation_server变量的值。
    collation_server 服务器的默认校对。     

3 字符集,校对定义与分配

    默认字符集可以在3个级别定义,分别是 数据库服务器(server)级别, 数据库(database)级别, 数据表(table)级别。

    数据库服务器(server)级别是指在my.cnf(Linux)会my.ini(Windows)上修改。

    一旦显示的分配了一个字符集,它就不会改变,即使我们稍后在表级别,数据库级别或者数据库服务器级别修改默认字符集。

    3.1 给列分配字符集

    属于同一个表的不同列可以有不同的字符集,如果没有为一个列显示的定义字符集就使用默认字符集。创建一个表的时候,若显示的为列指定字符集,则字符集作为数据类型选项包含在其中,要放在数据类型后面及空指定和主键前面。

    例如:

[sql]  view plain  copy
  1. create table colum_charset(  
  2. c1 char(10) character set utf8 not null,    
  3. c2 char(10) char set gbk,    
  4. c3 varchar(10) charset gb2312,   
  5. c4 varchar(10) );  

    其中:character set可以简写为char set和charset

    查看建表语句

[sql]  view plain  copy
  1. mysql> show create table  colum_charset \G  
  2. *************************** 1. row ***************************  
  3.        Table: colum_charset  
  4. Create Table: CREATE TABLE `colum_charset` (  
  5.   `c1` char(10) CHARACTER SET utf8 NOT NULL,  
  6.   `c2` char(10) CHARACTER SET gbk DEFAULT NULL,  
  7.   `c3` varchar(10) CHARACTER SET gb2312 DEFAULT NULL,  
  8.   `c4` varchar(10) DEFAULT NULL  
  9. ) ENGINE=InnoDB DEFAULT CHARSET=latin1  
    校验列字符集是否生效(生效)

[sql]  view plain  copy
  1. mysql> insert into colum_charset values("测试","测试","测试","测试");  
  2. mysql> select * from colum_charset;  
  3. +--------+--------+--------+------+  
  4. | c1     | c2     | c3     | c4   |  
  5. +--------+--------+--------+------+  
  6. | 测试   | 测试   | 测试   | ??   |  
  7. +--------+--------+--------+------+  
    3.2 给表指定字符集

    创建一个表,指定默认字符集为utf8

[sql]  view plain  copy
  1. create table table_charset(c1 char(10), c2 char(10)) charset=utf8;  
  2. 或者  
  3. create table table_charset(c1 char(10), c2 char(10)) default charset=utf8;  
    查看建表语句

[sql]  view plain  copy
  1. mysql> show create table table_charset \G  
  2. *************************** 1. row ***************************  
  3.        Table: table_charset  
  4. Create Table: CREATE TABLE `table_charset` (  
  5.   `c1` char(10) DEFAULT NULL,  
  6.   `c2` char(10) DEFAULT NULL  
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8  
    3.3 给数据库指定字符集

    创建的每个数据库都有一个默认字符集,如果没有指定,就用latin1。

[sql]  view plain  copy
  1. mysql> create database defaults;  
  2. mysql> show create database defaults;  
  3. +----------+---------------------------------------------------------------------+  
  4. | Database | Create Database                                                     |  
  5. +----------+---------------------------------------------------------------------+  
  6. | defaults | CREATE DATABASE `defaults` /*!40100 DEFAULT CHARACTER SET latin1 */ |  
  7. +----------+---------------------------------------------------------------------+  
  8. mysql> create database specify default charset  utf8;  
  9. mysql> show create database specify;  
  10. +----------+------------------------------------------------------------------+  
  11. | Database | Create Database                                                  |  
  12. +----------+------------------------------------------------------------------+  
  13. | specify  | CREATE DATABASE `specify` /*!40100 DEFAULT CHARACTER SET utf8 */ |  
  14. +----------+------------------------------------------------------------------+  
    3.4 给列分配校对

    每个列都应该有一个校对,如果没有显示指定,MySQL就使用属于该字符集的默认校对。如果指定了一个字符集和一个校对,字符集应该放在前面。
    例如:显示指定列校对

[plain]  view plain  copy
  1. create table column_collate(  
  2. c1 char(10) charset utf8 collate utf8_romanian_ci not null,   
  3. c2 varchar(10) charset utf8 collate utf8_spanish_ci);  
    获取校对信息

[plain]  view plain  copy
  1. mysql> select table_name, column_name, collation_name from information_schema.columns where table_name = 'column_collate';  
  2. mysql> select table_name, column_name, collation_name from information_schema.columns where table_name in ('column_collate');  
  3. +----------------+-------------+------------------+  
  4. | table_name     | column_name | collation_name   |  
  5. +----------------+-------------+------------------+  
  6. | column_collate | c1          | utf8_romanian_ci |  
  7. | column_collate | c2          | utf8_spanish_ci  |  
  8. +----------------+-------------+------------------+  
    注意:字符集和校对在处理字符表达式的过程中扮演着重要角色。 我们不能比较两个属于不同校对的不同字符值。

    例如:

[sql]  view plain  copy
  1. mysql> insert into column_collate values ('A', 'A');     
  2. mysql> select * from column_collate;  
  3. +----+------+  
  4. | c1 | c2   |  
  5. +----+------+  
  6. | A  | A    |  
  7. +----+------+  
  8. mysql> select * from column_collate where c1 = c2;  
  9. ERROR 1267 (HY000): Illegal mix of collations (utf8_romanian_ci,IMPLICIT) and (utf8_spanish_ci,IMPLICIT) for operation '='  
    3.5 字符直接量的字符集

    如果没有显示指定,那么字符直接量的字符集就是数据库的默认字符集。如果要显示分配另一个字符集,需要把字符集的名字放在直接量前面,并且要在字符集前面加上下划线。

    例如:

[sql]  view plain  copy
  1. mysql> select _utf8'语言 Language 言語 язык';  
  2. +---------------------------------+  
  3. | 语言 Language 言語 язык     |  
  4. +---------------------------------+  
  5. | 语言 Language 言語 язык     |  
  6. +---------------------------------+     
  7.   
  8. mysql> select _latin1'语言 Language 言語 язык';  
  9. +--------------------------------------------------------+  
  10. | è¯­è¨€ Language è¨€èªž ÑÐ·Ñ‹Ðº                     |  
  11. +--------------------------------------------------------+  
  12. | è¯­è¨€ Language è¨€èªž ÑÐ·Ñ‹Ðº                     |  
  13. +--------------------------------------------------------+  

4 修改和设置数据库服务器默认字符集

    MySQL服务器支持众多不同的字符集,这类字符集可在编译时和运行时指定。

    4.1 编译时指定

    编译时可指定默认字符集和默认校对规则,要想同时更改默认字符集和校对规则,要同时使用--with-charset和--with-collation选项。校对规则必须是字符集的合法校对规则。

[sql]  view plain  copy
  1. ./configure -- with-charset=CHARSET --with-collation=COLLATION  
    通过configure选项--with-extra-charsets=LIST,可以定义在服务器中再定义 增加字符集 。LIST 指下面任何一项:
    1.空格间隔的一系列字符集名
    2.complex -,以包括不能动态装载的所有字符集
    3.all –,以将所有字符集包括进二进制

[sql]  view plain  copy
  1. ./configure -- with-charset=CHARSET --with-collation=COLLATION --with-extra-charsets=all  
     4.2 在my.cnf或my.ini中指定

[sql]  view plain  copy
  1. [mysqld]  
  2. character_set_server=utf8  
    影响参数:character_set_server 和 character_set_database

    注意:修改后要重启数据库才能生效。

[sql]  view plain  copy
  1. [client]  
  2. default-character-set=utf8  
    影响参数:character_set_client,character_set_connection 和character_set_results。

    注意:修改后无需重启数据库。
    4.3 在启动参数前指定

[sql]  view plain  copy
  1. ./mysqld --character-set-server=utf8 &  
    影响参数:character_set_server 和 character_set_database

    4.4 临时指定 

[sql]  view plain  copy
  1. mysql> SET character_set_client = utf8;    
  2. mysql> SET character_set_connection = utf8;     
  3. mysql> SET character_set_database = utf8;     
  4. mysql> SET character_set_results = utf8;      
  5. mysql> SET character_set_server = utf8;   
    其中character_set_client,character_set_connection 和character_set_results,可通过一句话指定

[sql]  view plain  copy
  1. mysql> SET NAMES 'utf8';  

5 字符集转换流程

    5.1 MySQL中的字符集转换过程
    a.MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;
    b.进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,其确定方法如下:
      使用每个数据字段的CHARACTER SET设定值;
      若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准);
      若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值;
      若上述值不存在,则使用character_set_server设定值。
    c.将操作结果从内部操作字符集转换为character_set_results。

        

6 数据库乱码案例及解决方案
    6.1 产生乱码的根本原因在于:

    a.客户机没有正确地设置client字符集,导致原先的SQL语句被转换成connection所指字符集,而这种转换,是会丢失信息的,如果client是utf8格式,那么如果转换成gb2312格式,这其中必定会丢失信息,反之则不会丢失。一定要保证connection的字符集大于client字符集才能保证转换不丢失信息。
    b. 数据库字体没有设置正确,如果数据库字体设置不正确,那么connection字符集转换成database字符集照样丢失编码,原因跟上面一样。

    6.2 乱码或数据丢失

    character_set_client:我们要告诉服务器,我给你发送的数据是什么编码?
    character_set_connection:告诉字符集转换器,转换成什么编码?
    character_set_results:查询的结果用什么编码?
    如果以上三者都为字符集N,可简写为set names 'N';

        6.2.1 乱码问题

        模拟情景1

        向默认字符集为utf8的数据表插入utf8编码的数据前连接字符集设置为latin1,查询时设置连接字符集为utf8。

        插入时根据MySQL服务器的默认设置,character_set_client、character_set_connection和character_set_results均为latin1;
        插入操作的数据将经过latin1=>latin1=>utf8的字符集转换过程,这一过程中每个插入的汉字都会从原始的3个字节变成6个字节保存;
        查询时的结果将经过utf8=>utf8的字符集转换过程,将保存的6个字节原封不动返回,产生乱码……


        例如:

[sql]  view plain  copy
  1. mysql> set names latin1;  
  2. mysql> create table temp(name varchar(10)) charset utf8;  
  3. mysql> insert into temp values('中国');  
  4. mysql> select * from temp;  
  5. +--------+  
  6. | name   |  
  7. +--------+  
  8. | 中国   |  
  9. +--------+  
  10. mysql> set names utf8;  
  11. mysql> select * from temp;  
  12. +---------------+  
  13. | name          |  
  14. +---------------+  
  15. | ä¸­å›½        |  
  16. +---------------+  
        注意:存储字符集编码比插入时字符集大时,如果原封不动返回数据会出现乱码,不过可通过修改查询字符集,避免乱码,即不会丢失数据。

        6.2.2 数据丢失问题

        模拟情景1

        向默认字符集为latin1的数据表插入utf8编码的数据前设置了连接字符集为utf8
        插入时根据连接字符集设置,character_set_client、character_set_connection和character_set_results均为utf8;
        插入数据将经过utf8=>utf8=>latin1的字符集转换,若原始数据中含有\u0000~\u00ff范围以外的Unicode字 符,会因为无法在latin1字符集中表示而被转换为“?”(0×3F)符号,以后查询时不管连接字符集设置如何都无法恢复其内容了。


       例如:

[sql]  view plain  copy
  1. mysql> set names utf8;  
  2. mysql> create table temp(name varchar(10)) charset latin1;  
  3. mysql> insert into temp values('中国');  
  4. mysql> select * from temp;  
  5. +------+  
  6. | name |  
  7. +------+  
  8. | ??   |  
  9. +------+  
  10. mysql> set names latin1;  
  11. mysql> select * from temp;  
  12. +------+  
  13. | name |  
  14. +------+  
  15. | ??   |  
  16. +------+  
        数据不完整了,且无法恢复。

    6.3 乱码终极解决方案

        1.首先要明确你的客户端时候何种编码格式,这是最重要的(IE6一般用utf8,命令行一般是gbk,一般程序是gb2312)
        2.确保你的数据库使用utf8格式,很简单,所有编码通吃。
        3.一定要保证connection字符集大于等于client字符集,不然就会信息丢失,比如: latin1 < gb2312 < gbk < utf8,若设置set character_set_client = gb2312,那么至少connection的字符集要大于等于gb2312,否则就会丢失信息
        4.以上三步做正确的话,那么所有中文都被正确地转换成utf8格式存储进了数据库,为了适应不同的浏览器,不同的客户端,你可以修改character_set_results来以不同的编码显示中文字体,由于utf8是大方向,因此web应用是我还是倾向于使用utf8格式显示中文的。

SQL字符集 1、字符集是所有编程语言里都必须面对的首要问题,必须在一开始就选择好字符集(去到企业后先问清楚)业务针对的符号业务针对的范围2、乱码是编程中最基础要解决的问题,一旦数据产生了乱码,通常是不可逆操作3、解决乱码问题其实本质就是统一字符集问题客户端字符集:character_set_client连接层字符集:character_set_connection结果集字符集:`character_set_results简单统一方式:set names 客户端字符集。 阅读详情

相关推荐

3、MySQL字符集和校对规则

​ 客户端:character_set_connection > character_set_results。字段类型为varchar(30),在utf8字符集下,可以存多少汉字?字段类型为varchar(30),在utf8字符集下,可以存多少英文?​字段类型为varchar(30),在gbk字符集下,可以存多少英文?字段类型为varchar(30),在gbk字符集下,可以存多少汉字?​ character_set_database # 数据库默认使用的字符集。30个字符,不是字节。

Oracle/MySQL 到 国产信创数据库|迁移 · 调优 · 信创替换 1566

还原数据库提示 Unknown collation ‘utf8_general_mysql500_ci’解决方式

还原数据库提示 Unknown collation ‘utf8_general_mysql500_ci’解决方式 原因:还原的mysql版本不对应 这里用 MySQL 版本:5.5.29 创建数据库的时候 选择 utf8_general_mysql500_ci 还原成功! navicat搜索对应表 修改排序规则 ...

1532

S905L3B机顶盒刷Armbian:从安卓Root到eMMC全攻略

在嵌入式开发与轻量级服务器搭建中,ARM架构设备因其低功耗和高性价比备受关注。晶晨S905L3B作为运营商机顶盒的主流芯片,通过刷写Armbian系统可将其改造为ARM小服务器。其原理是利用Amlogic芯片的uboot引导机制,将Linux系统写入eMMC存储,从而脱离原厂安卓限制。这一方案的技术价值在于以极低成本实现Docker容器、下载机、轻量数据库等服务的部署,应用场景涵盖家庭网络广告过滤、智能家居控制、复古游戏机等。本文以CM311-1S为例,详细拆解从安卓9 Root到Armbian写入eMMC

weixin_31476015的博客 340

mysql修改字符集和备份

修改字符集 背景:公司业务数据book,由于之前建表没注意字符集的问题,导致之前写入的数据出现乱码。现在要将之前的数据和现在数据的字符集一致,不出现乱码情况,将字符集为latin1已有记录的数据转成utf8,并且已经存在的记录不乱码。 步骤 1:导出表结构,sed批量修改为utf8 2:导出之前所有的数据,sed批量修改为utf8 3:删除原有的库表及数据 4:导入表结构和所有数据 一、准备实验环...

weixin_46389787的博客 1014

图解B树的原理及操作

本文主要参考:https://blog.youkuaiyun.com/shenchaohao12321/article/details/83243314 1. B树 1.1 B树的定义 B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。 一颗m阶的B树定义如下: 1)每个结点最多有m-1个关键字。 2)根结点最少可以只有1个关键字。 3)非根结点至少有Math.ceil(m/2)-

jinking01的专栏 3万+

使用ST-LINK烧录stm32教程说明

使用ST-LINK烧录stm32

qq_34426854的博客 1万+

mysql字符集补充说明

字符集补充说明: ASCII字符集:American Standard Code for Information Interchange,美国信息互换标准编码。7位(bits)表示一个字符,共128字符,字符值从0到127。包括控制字符:回车键、退格、换行键等。可显示字符:英文大小写字符、阿拉伯数字和西文符号。 ASCII扩展字符集:它是从ASCII字符集扩充出来的,扩充后的符号增加了表格符号、计算符号、希腊字母和特殊的拉丁符号。ASCII扩展字符集使用8位(bits)表示一个字符,共256字符。 Unic

树懒的博客 170

管理类联考——逻辑——真题篇——按知识分类——综合推理

29、某部门抽检了肉制品、白酒、乳制品、干果、蔬菜、水产品、饮料等﹖类商品共521种样品,发现其中合格样品515种,不合格样品6种。已知: (1)蔬菜、白酒中有2种不合格样品。 (2)肉制品、白酒、蔬菜、水产品中有5种不合格样品。 (3)蔬菜、乳制品、干果中有3种不合格样品。 根据上述信息,可以得出以下哪项? A. 乳制品中没有不合格样品。 B. 肉制品中没有不合格样品。 C. 蔬菜中没有不合格样品。 D. 白酒中没有不合格样品。 E. 水产品中没有不合格样品。 31~32题基于以下题干: 某中学举行田径运

stqer的博客 2017

mysql 各表charset不同_MySQL表字段字符集不同导致的索引失效问题

1. 概述昨天在一位同学的MySQL机器上面发现了这样一个问题,MySQL两张表做left join时,执行计划里面显示有一张表使用了全表扫描,扫描全表近100万行记录,大并发的这样的SQL过来数据库变得几乎不可用了。MySQL版本为官方5.7.12。2. 问题重现首先,表结构和表记录如下:mysql> show create table t1\G*************** 1. row...

weixin_35715440的博客 370

【CANdelaStudio编辑CDD】-21.2-创建OBD诊断$03,$07,$0A和$04服务以及OBD DTC

案例背景(共11页精讲):创建OBD诊断$03,$07,$0A和$04服务;以及OBD DTC。 在《【ISO15031_OBD诊断】-3.1-$03服务Request emission-related diagnostic trouble codes理论部分https://blog.youkuaiyun.com/qfmzhu/article/details/122157513》, 《【ISO15031_OBD诊断】-7.1-$07服务Request emission-related diagnostic trou

「汽车电子助手」的博客 1697

STM32Cube高效开发教程<高级篇><FreeRTOS>(十八)-----软件定时器

一、 软件定时器概述声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(高级篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。在FreeRTOS中,自动创建的任务有空闲任务和定时器服务任务。FreeRTOS可以通过定时器服务任务提供软件定时器功能。在某些对定时精度要求不太高,无须使用硬件定时器的情况下,我们可以使用FreeRTOS的软件定时器。

我的博客 156

oracle改字符集sjis,MySQL字符集专题(字符集,校对,乱码)_MySQL

1 MySQL字符集简介MySQL服务器可以支持多种字符集,在同一台服务器,同一个数据库,甚至同一个表的不同字段都可以指定使用不同的字符集,相比oracle等其他数据库管理系统,在同一个数据库只能使用相同的字符集,MySQL明显存在更大的灵活性。MySQL的字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念。字符集是用来定义MySQL存储字符串的方式,校对规则则是定义了...

weixin_39942400的博客 330

麻辣香锅病毒分析

Spicy Hot Pot浏览器劫持病毒(麻辣香锅病毒)从2020年初被安全公司监测到,因其病毒模块带有MLXG_KM被安全行业代称麻辣香锅病毒。目前通过各种激活工具传播, 包括暴风激活、小马激活和KMS激活等诸多工具,疑似与下载站进行合作推广此类激活工具。Spicy Hot Pot 是一个浏览器劫持 Rootkit,它会将用户的主页更改为指向恶意软件操作员控制的页面,此外还会将内存转储从机器上传到预定义的服务器,并结合本地更新功能以确保其保持更新。通常浏览器劫持者会通过更改用户主页的恶意可执行文件或注册表

不忘初心,护天下安全! 4788

【MySQL基础】字符集与校对集详解

MySQL中的字符集与校对集知识详解,一文带你搞清字符集和校对集以及其根据需求不同而在MySQL环境,数据库,数据表和字段这4个方面中的设置查看修改等操作。

小杨的博客 6390

【四足机器人项目实战】四足机器人嵌入式硬件设计

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、电源管理板设计及制作二、通讯中继板设计及制作三、力控无刷电机驱动板设计及制作1.磁场定向控制FOC控制原理2.电机转子位置、速度检测原理3.硬件CAN通讯原理 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对四足机器人–嵌入式硬件设计做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、电

qq_35635374的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MySQL - 字符集与校对规则:乱码问题解决与最佳配置

MySQL字符集与乱码解决方案摘要 MySQL字符集(Character Set)和校对规则(Collation)是解决多语言存储问题的关键。字符集定义字符与编码的映射关系,推荐使用utf8mb4(支持完整Unicode),而非有缺陷的utf8。校对规则(如utf8mb4_unicode_ci)决定字符比较排序方式。 乱码通常由编码不一致导致,需确保全链路统一使用utf8mb4: 服务器配置(my.cnf)设置默认字符集 建库建表显式指定utf8mb4 Java应用配置JDBC连接参数(characterE

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

MySQL字符集和校对规则详解和MySQL查看字符集和校对规则

在讲解字符集和校对规则之前,我们先来简单了解一下字符、字符集和字符编码。字符(Character)是计算机中字母、数字、符号的统称,一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号等。计算机是以二进制的形式来存储数据的。平时我们在显示器上看到的数字、英文、标点符号、汉字等字符都是二进制数转换之后的结果。字符集(Character set)定义了字符和二进制的对应关系,为字符分配了唯一的编号。常见的字符集有 ASCII、GBK、IOS-8859-1 等。

m0_37449634的博客 2113

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

mysql字符集与校对规则设置_mysql 字符集和校对规则

1,常规字符集及校对假设我们有一个字母表使用了四个字母:‘A’、‘B’、‘a’、‘b’。我们为每个字母赋予一个数值:‘A’=0,‘B’= 1,‘a’= 2,‘b’= 3。字母‘A’是一个符号,数字0是‘A’的编码,这四个字母和它们的编码组合在一起是一个字符集。希望比较两个字符串的值:‘A’和‘B’。比较的最简单的方法是查找编码:‘A’为0,‘B’为1。因为0 小于1,我们可以说‘A’小于‘B’。我...

weixin_39882394的博客 1582

MySQL个人学习笔记——字符集、校对集

字符集 字符集是多个字符的集合,计算机对字符的处理将按照着指定的编码规则进行。不同的字符集有着不同编码规则,如果将使用一种字符集处理过字符串转移到使用另一种字符集的环境中时将导致乱码。(如:utf8使用3个字节保存一个中文字符,gbk使用2个字节保存一个中文字符,在utf8环境中去处理gbk中文字符,utf8环境将读取3个字节,而此时已经超出gbk一个中文字符的字节并且读取了一个不属于该字符的存储...

weixin_38427857的博客 453

关于Navicat和MYSQL字符集不统一出现的中文乱码问题

最近遇到一串关于MYSQL中文乱码的问题,问题背景是这样的:   在此之前,服务器上安装好MySQL之后就立马重新配置了字符集为utf8,之后用Navicat进行数据导入,发现中文的字符导入之后全是乱码,然后查论坛很 快通过以下方式解决了:建立连接时编码选择UTF-8,把使用MYSQL字符集之前的勾勾去掉。 数据库的属性设置为: OK,Navicat

fenfei12138的博客 6万+

mysql字符集和校对规则(character sets and collations)详解

mysql字符集(character sets)是指一系列符号以及符号对应的编码的集合,比如英文字母可以用ASCII编码,中文可以用GBK或者UTF8编码。校对规则(collations)则是指一种比较字符的规则,这种比较规则决定了mysql如何进行排序以及如果对字符比较大小。 mysql的character sets和collations有很多种,而且可以在多个维度去配置,包含服务器的配置和客户端的配置,对于初学者往往容易搞混,有时候出了乱码等问题也不知道怎么排查。今天笔者就详细梳理一下mysql中的c

gitcat的博客 7873

MySQL字符集和校对规则

本文对MySQL支持的常规字符集和校对规则作了一个简单的说明,并介绍了MySQL常用字符集变量的含义和设置,字符集变量的不恰当设置有可能导致包括乱码在内的诸多问题。常规字符集和校对字符集是一套符号和编码。校对规则是在字符集内用于比较字符的一套规则。MySQL服务器能够支持多种字符集,可以使用SHOW CHARACTER SET语句列出可用的字符集。任何一个给定的字符集至少有

2367

MySQL数据库——MySQL字符集和校对规则详解

在讲解字符集和校对规则之前,我们先来简单了解一下字符、字符集和字符编码。是计算机中字母、数字、符号的统称,一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号等。计算机是以二进制的形式来存储数据的。平时我们在显示器上看到的数字、英文、标点符号、汉字等字符都是二进制数转换之后的结果。定义了字符和二进制的对应关系,为字符分配了唯一的编号。常见的字符集有 ASCII、GBK、IOS-8859-1 等。也可以称为字集码,规定了如何将字符的编号存储到计算机中。

Itmastergo的博客 1910

11、MySQL字符集和校对规则详解

在讲解字符集和校对规则之前,我们先来简单了解一下字符、字符集和字符编码。 字符(Character)是计算机中字母、数字、符号的统称,一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号等。 计算机是以二进制的形式来存储数据的。平时我们在显示器上看到的数字、英文、标点符号、汉字等字符都是二进制数转换之后的结果。 字符集(Character set)定义了字符和二进制的对应关系,为字符分配了唯一的编号。常见的字符集有 ASCII、GBK、IOS-8859-1 等。 字符编码(Characte

you can you up up up的博客 789

mysql字符集校对_MySQL字符集与校对

一、什么是字符集与校对1.字符集与校对字符集是指一种从二进制编码到某种字符符号的映射。校队是指一组用于某个字符集的配许规则。2.utf8与utf8mb4标准的UTF-8字符集编码是可以使用1-4个字节去编码21位字符,这几乎包含了世界上所有能看见的语言。MySQL里面实现的utf8最长使用3个字符,包含了大多数字符但并不是所有。例如emoji和一些不常用的汉字,如“墅”,这些需要四个字节才能编码的...

weixin_36246992的博客 534
上一篇: Servlet 线程安全 ?
下一篇: maven创建spring项目之后,启动报错java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoade
Y_JY
博客等级 码龄15年 7粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值