mysqlgbk不支持中文吗_MySQL编码不一致,为什么还能显示中文?

2023-05-16

1、MySQL 的字符集支持有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

2、Db characterset: 你对这个理解好像有些偏差,这个是指当前数据库默认字符集, 请看下面例子。

CREATE DATABASE `db_test1` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

use db_test1;

status;

Server characterset: utf8

Db characterset: utf8

Client characterset: utf8

Conn. characterset: utf8

----------------------------------------

CREATE DATABASE `db_test2` CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci';

use db_test2;

status;

Server characterset: utf8

Db characterset: latin1

Client characterset: utf8

Conn. characterset: utf8

3、Server characterset 是指你创建数据库时如果不指定字符集时候使用的默认字符集。

4、Client characterset 是客户端连接到mysql所用的字符集,也就是说是使用这种字符集和数据库进行交互的。数据库最终存储的二进制,也就是说按照这个编码把当前输入的字符进行编码成对应的二进制。可以在登录mysql指定。

mysql -uroot -p --default-character-set=latin1

set names latin1

现在已经指定字符集有好几种,服务器、客户端、数据库已经表等。 所以对于“对应编码相同就不会乱码”就需要重新理解一下,我的理解是:当客户端和数据库表所用的字符集一致就不会乱码。注意:服务器字符集可以使用utf-8、数据库字符集可以用GBK,而最终的表也可以为utf8。

CREATE DATABASE `db_test1` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

use db_test1;

show create database db_test1;

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

| Database | Create Database |

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

| db_test1 | CREATE DATABASE `db_test1` /*!40100 DEFAULT CHARACTER SET utf8 */ |

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

create table test(name varchar(20)) default charset = latin1;

show create table test;

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

| Table | Create Table |

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

| test | CREATE TABLE `test` (

`name` varchar(20) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

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

退出后重新连mysql

mysql db_test1 --default-character-set=latin1

status

Connection id: 299

Current database: db_test1

Current user: root@localhost

SSL: Not in use

Current pager: stdout

Using outfile: ''

Using delimiter: ;

Server version: 5.6.23 MySQL Community Server (GPL)

Protocol version: 10

Connection: Localhost via UNIX socket

Server characterset: utf8

Db characterset: utf8

Client characterset: latin1

Conn. characterset: latin1

insert into test values('中文测试');

select * from test;

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

| name |

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

| 中文测试 |

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

可以看到这里没有看到乱码。当使用命令set names 修改客户端字符集的情况

mysql> set names utf8;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from test;

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

| name |

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

| 中文测试 |

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

1 row in set (0.00 sec)

mysql> set names gbk;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from test;

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

| name |

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

| ???????? |

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

1 row in set (0.00 sec)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysqlgbk不支持中文吗_MySQL编码不一致,为什么还能显示中文? 的相关文章

随机推荐