mysql计算库字符集基本理解版权声明

原创
小哥 2年前 (2022-12-30) 阅读数 90 #大杂烩

1.MySQL(4.1以后版本) 服务器中有六个关键位置使用了字符集的概念。他们是:

1

2

3

4

5

6

1 .client

2 .connection

3 .database

4 .results

5 .server

6 .system

MySQL有两个字符集概念:

1

2

一个是字符集本身,

一个是字符集验证规则。

字符集影响数据在传输和存储中的处理方式,而字符集验证影响ORDER BY和GROUP BY这些方式。

  1. 字符集功能细分如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

2.1 .和存储相关

服务器字符集 (@ @character_set_server )

库字符集 (@ @character_set_database )

表字符集

字段字符集

character_set_server: 服务器安装期间指定的默认字符集设置。

character_set_database: 数据库服务器中库使用的字符集设置。如果在创建库时未指定,则将使用安装服务器时指定的字符集设置。

character_system: 数据库系统使用的字符集。

创建表时,每个字段只要不是binary,将有一个字符集。如果未指定,则在SHOW CREATE TABLE届时,它不会出现。

构建表时,字段字符集的选择如下,这是一种继承形式:

* if 字段指定的字符集

* else if 表指定的字符集

* else if @ @character_set_database

* else @ @character_set_server (如果未设置,则该值为latin1) 2.2 .和传输相关

@@character_set_connection
@@character_set_results
@@character_set_client

character_set_connection: 连接数据库的字符集设置类型,如果jsp未指定用于连接到数据库的字符集类型,这是根据服务器端的默认字符设置设置的。
character_set_results: 数据库返回到客户端时使用的字符集。如果未指定,则使用服务器的默认字符集。
character_set_client: 客户端使用的字符集,相当于网页中的字符集设置。

3.字符集的校对规则

1

2

3

4

5

6

7

字符集的校对规则由上述设置。character_set_connection, character_set_database, character_set_server决定

collation_connection: 连接字符集的校对规则

collation_database: 默认数据库使用的校对规则。当默认数据库更改时,服务器将设置此变量。如果没有默认数据库,则变量的值相同。collation_server

collation_server: 服务器的默认校对规则

在上述内容中character_set_client, character_set_connection, character_set_results 受客户端默认字符集影响,其中jsp编译mysql模块也受其链接时的默认字符集mysql动态库效果,从而影响php的character_set_connection, character_set_client设定。

4.当默认字符集不是utf8时,设置my.cnf:

1

2

3

[mysqld]

default -character-set=utf8

default -collation=utf8_general_ci //default-character-set只能更改存储层(server,database,table,column,system)对客户端和服务器之间的通信层没有影响。

5.要查看字符集设置,请执行以下操作:

1

2

3

4

5

6

7

8

9

10

11

mysql> SHOW VARIABLES LIKE ‘character_set_%’;

+---------+-------------------------+

| Variable_name | Value |

+---------+-------------------------+

| character_set_client | latin1 |

| character_set_connection | latin1 |

| character_set_database | utf8 |

| character_set_filesystem | binary |

| character_set_results | latin1 |

| character_set_server | utf8 |

| character_set_system | utf8

6.解决字符集通信设置不匹配的方法:

1

2

3

4

5

(修改默认值character_set_client,character_set_connection,character_set_result)

1 . jsp程序在查询数据库之前执行。mysql_query(”set names utf8;”);

2 .修改my.cnf,在[mysqld]中加入init-connect=”set names utf8” (超级用户连接的选项无效)

3 . 启动mysqld 加入参数 –skip-character-set-client-handshake 忽略客户端字符集

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门