Table des matières
回复内容:
Maison développement back-end tutoriel php MySQL编码不一致,为什么还能显示中文?

MySQL编码不一致,为什么还能显示中文?

Jun 06, 2016 pm 08:32 PM
mysql php 中文乱码

MySQL编码不一致,为什么还能显示中文?

1)不是应该用相同的编码才不会乱码的吗?
另外,数据库的编码是latin1不是不支持中文的吗?为什么我这里能显示中文?

2)还有一点不理解的是:我用set names utf8后,中文会乱码;
用set names gbk 后,中文能正常显示了,还是不太理解,为什么utf8不能显示中文?

3)我设置了set names gbk后,中文显示没有问题了。但关闭客户端再打开的时候,又必须再来一次set names gbk才能显示中文,怎么解决这个问题。

回复内容:

MySQL编码不一致,为什么还能显示中文?

1)不是应该用相同的编码才不会乱码的吗?
另外,数据库的编码是latin1不是不支持中文的吗?为什么我这里能显示中文?

2)还有一点不理解的是:我用set names utf8后,中文会乱码;
用set names gbk 后,中文能正常显示了,还是不太理解,为什么utf8不能显示中文?

3)我设置了set names gbk后,中文显示没有问题了。但关闭客户端再打开的时候,又必须再来一次set names gbk才能显示中文,怎么解决这个问题。

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

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

<code>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
</code>
Copier après la connexion

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

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

<code>mysql -uroot -p --default-character-set=latin1

或

set names latin1
</code>
Copier après la connexion

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

<code>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&gt; set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql&gt; select * from test;
+------------------------------+
| name                         |
+------------------------------+
| 中文测试 |
+------------------------------+
1 row in set (0.00 sec)

mysql&gt; set names gbk;
Query OK, 0 rows affected (0.00 sec)

mysql&gt; select * from test;
+----------------+
| name           |
+----------------+
| ???????? |
+----------------+
1 row in set (0.00 sec)
</code>
Copier après la connexion

因为 windows 下的 cmd 不支持 utf8 编码,所以使用 utf8 编码会乱码。

因为是在windows下,所以set names gbk显示正常
Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8
这样就不用每次set names gbk

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Date et heure de CakePHP

Configuration du projet CakePHP Configuration du projet CakePHP Sep 10, 2024 pm 05:25 PM

Configuration du projet CakePHP

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Téléchargement de fichiers CakePHP

Routage CakePHP Routage CakePHP Sep 10, 2024 pm 05:25 PM

Routage CakePHP

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

Discuter de CakePHP

Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4 Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4 Dec 09, 2024 am 11:42 AM

Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4

Guide rapide CakePHP Guide rapide CakePHP Sep 10, 2024 pm 05:27 PM

Guide rapide CakePHP

See all articles