Maison base de données tutoriel mysql MySQL乱码处理及字符集相关介绍_MySQL

MySQL乱码处理及字符集相关介绍_MySQL

Jun 01, 2016 pm 01:34 PM
中文 数据库 记录

bitsCN.com

  • 问题引入:

        我们经常会遇到一些向MySQL数据库中插入中文,但是select出来的时候,却发现是乱码的情况。如我们向表a出入这样一段记录:i

insert into a values('你好helloworld你好','helloworld');
Copier après la connexion

可能当你访问它的时候,会发现他的结果变成如下图所示:

image

那怎么样才能解决这种问题呢?通过下文对MySQL中字符集的一些操作,你将会得到答案!

 

  • 查看库、表字符集命令:

        要解决字符集的问题,首先要知道现在的系统、数据库、表、客户端等使用什么样的字符集,以及系统支持什么字符集等,下面介绍一些获取相关信息的语句:

1.查看数据库支持的所有字符集

show character set;或者show char set;
Copier après la connexion

Image(42)

2.查看当前状态,里面当然包括字符集的设置:

status或者/s
Copier après la connexion

Image(43)

其中Db characterset对应的是数据库目录下的db.opt文件内容:

Image(44)

3.查看系统字符集设置,包括所有的字符集设置:

show variables like '%char%';
Copier après la connexion

得出如何所示结果:

Image(40)

其中的含义如下:

Image(41)

关于connection相关的字符集的官方文档:

  • What character set is the statement in when it leaves the client?

The server takes the character_set_client system variable to be the character set in which statements are sent by the client.

 

  • What character set should the server translate a statement to after receiving it?

For this, the server uses the character_set_connection and collation_connection system variables. It converts statements sent by the client from character_set_client to character_set_connection (except for string literals that have an introducer such as _latin1 or _utf8). collation_connection is important for comparisons of literal strings. For comparisons of strings with column values, collation_connection does not matter because columns have their own collation, which has a higher collation precedence.

 

  • What character set should the server translate to before shipping result sets or error messages back to the client?
The character_set_results system variable indicates the character set in which the server returns query results to the client. This includes result data such as column values, and result metadata such as column names and error messages.

     从上文中可以看出character_set_connection、character_set_client、character_set_results三个字符集什么时候用到。从实际上可以看到,当客户端连接服务器的时候,它会将自己想要的字符集名称发给mysql服务器,然后服务器就会使用这个字符集去设置character_set_connection、character_set_client、character_set_results这三个值。如cmd是用gbk,而mysql workbench是用utf8.

CMD:

image

MySql WorkBench:

image

 

4.查看数据表中字符集设置:

show full columns from tablename;
Copier après la connexion

Image(45)

show create table tablename/G;
Copier après la connexion

Image(46)

 

5.查看数据库编码:

show create database dbname;
Copier après la connexion

Image(47)

 

  • 创建时指定字符集:

        知道了怎么查找字符集的相关信息之后,我们就要懂得怎么在创建指定对象的时候,为该对象匹配相应的字符集。

1.服务器级:

在安装MySQL时可以设置服务器的默认编码格式,也可对my.ini做修改,修改[mysqld]里面的character_set_server=utf8,则可设置character_set_server的值。

2.数据库级:

CREATE DATABASE db_name DEFAULT CHARACTER SET utf8;
Copier après la connexion

Image(48)

注意,如果不指定默认的字符集,则系统会根据character_set_database的值进行设置,如:

Image(49)

3.表级:

CREATE TABLE  `db_name`.`tb_name` (id VARCHAR(20) NOT NULL,name VARCHAR(20) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Copier après la connexion

从下图可看出,定义表的默认字符集为utf8,即使character_set_database为gbk,但是表的列都未utf8

Image(50)

但要注意,如果没有定义表的默认字符集,则他会按照character_set_database的值来设置,如图所示:

Image(51)

4.列级:

CREATE TABLE  `db_name`.`tb_name` (   id varchar(20) NOT NULL,   name varchar(20) CHARACTER SET utf8 );
Copier après la connexion

从下图可以看到,整个表的默认字符集为gbk,所以没有指定字符集的列都用默认的字符集,而指定了字符集的列name,则使用指定的字符集utf8。

Image(52)

 

  • 修改字符集命令

        如果已经是创建好的对象,那又应该如何处理呢。我们就应该对指定对象就行修改字符集的操作。

1.修改character_set_connection、character_set_client、character_set_results三值:

对于某一个连接来说,可以使用:

SET NAMES 'charset_name' [COLLATE 'collation_name']
Copier après la connexion
Copier après la connexion

image

命令

SET NAMES 'charset_name' [COLLATE 'collation_name']
Copier après la connexion
Copier après la connexion

相当于

SET character_set_client = charset_name; SET character_set_results = charset_name; SET character_set_connection = charset_name;
Copier après la connexion

另外、还可以修改配置文件,对[mysql]下增加default-character-set=utf8,配置成你想要的字符集。(个人尝试在my.ini里面配置过,没有成效,不知道是不是被使用的客户端想要的字符集给覆盖掉了呢?)

2.修改character_set_database字段:

ALTER DATABASE db_name     [[DEFAULT] CHARACTER SET charset_name]     [[DEFAULT] COLLATE collation_name]
Copier après la connexion

image

3.修改character_set_server字段:

最简单的方法是直接改my.ini配置文件里面[mysqld]的字段,增加character-set-server=gbk,然后重启mysqld,则可改为你想要的字符集。

4.修改表的字符集:

ALTER TABLE tbl_name     [[DEFAULT] CHARACTER SET charset_name]     [COLLATE collation_name]
Copier après la connexion

5.修改列的字符集:

col_name {CHAR | VARCHAR | TEXT} (col_length)     [CHARACTER SET charset_name]     [COLLATE collation_name]
Copier après la connexion

例如:

ALTER TABLE t1 MODIFY     col1 VARCHAR(5)       CHARACTER SET latin1       COLLATE latin1_swedish_ci;
Copier après la connexion

 

  • 参考资料:

MySQL的Character Set Support:  http://dev.mysql.com/doc/refman/5.6/en/charset.html

mysql常用查看库,表字符集命令:  http://bjlfp.blog.163.com/blog/static/773684612012298455765/

MySQL 插入数据时,中文乱码问题的解决: http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html

 

 

bitsCN.com
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

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

Outils chauds

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)

Comment le langage Go implémente-t-il les opérations d'ajout, de suppression, de modification et de requête de la base de données ? Comment le langage Go implémente-t-il les opérations d'ajout, de suppression, de modification et de requête de la base de données ? Mar 27, 2024 pm 09:39 PM

Le langage Go est un langage de programmation efficace, concis et facile à apprendre. Il est privilégié par les développeurs en raison de ses avantages en programmation simultanée et en programmation réseau. Dans le développement réel, les opérations de base de données font partie intégrante. Cet article explique comment utiliser le langage Go pour implémenter les opérations d'ajout, de suppression, de modification et de requête de base de données. Dans le langage Go, nous utilisons généralement des bibliothèques tierces pour faire fonctionner les bases de données, telles que les packages SQL couramment utilisés, gorm, etc. Ici, nous prenons le package SQL comme exemple pour présenter comment implémenter les opérations d'ajout, de suppression, de modification et de requête de la base de données. Supposons que nous utilisons une base de données MySQL.

Conseils pour résoudre les caractères chinois tronqués lors de l'écriture de fichiers txt avec PHP Conseils pour résoudre les caractères chinois tronqués lors de l'écriture de fichiers txt avec PHP Mar 27, 2024 pm 01:18 PM

Conseils pour résoudre les caractères chinois tronqués écrits par PHP dans des fichiers txt Avec le développement rapide d'Internet, PHP, en tant que langage de programmation largement utilisé, est utilisé par de plus en plus de développeurs. Dans le développement PHP, il est souvent nécessaire de lire et d'écrire des fichiers texte, y compris des fichiers txt qui écrivent du contenu chinois. Cependant, en raison de problèmes de format d'encodage, le chinois écrit apparaîtra parfois tronqué. Cet article présentera quelques techniques pour résoudre le problème des caractères chinois tronqués écrits dans des fichiers txt par PHP et fournira des exemples de code spécifiques. Analyse de problèmes en PHP, texte

Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP Jun 04, 2024 pm 01:42 PM

Comment utiliser MySQLi pour établir une connexion à une base de données en PHP : Inclure l'extension MySQLi (require_once) Créer une fonction de connexion (functionconnect_to_db) Appeler la fonction de connexion ($conn=connect_to_db()) Exécuter une requête ($result=$conn->query()) Fermer connexion ( $conn->close())

Comment Hibernate implémente-t-il le mappage polymorphe ? Comment Hibernate implémente-t-il le mappage polymorphe ? Apr 17, 2024 pm 12:09 PM

Le mappage polymorphe Hibernate peut mapper les classes héritées à la base de données et fournit les types de mappage suivants : join-subclass : crée une table séparée pour la sous-classe, incluant toutes les colonnes de la classe parent. table par classe : créez une table distincte pour les sous-classes, contenant uniquement des colonnes spécifiques aux sous-classes. union-subclass : similaire à join-subclass, mais la table de classe parent réunit toutes les colonnes de la sous-classe.

iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées Jul 18, 2024 am 05:48 AM

Les dernières versions d'Apple des systèmes iOS18, iPadOS18 et macOS Sequoia ont ajouté une fonctionnalité importante à l'application Photos, conçue pour aider les utilisateurs à récupérer facilement des photos et des vidéos perdues ou endommagées pour diverses raisons. La nouvelle fonctionnalité introduit un album appelé "Récupéré" dans la section Outils de l'application Photos qui apparaîtra automatiquement lorsqu'un utilisateur a des photos ou des vidéos sur son appareil qui ne font pas partie de sa photothèque. L'émergence de l'album « Récupéré » offre une solution aux photos et vidéos perdues en raison d'une corruption de la base de données, d'une application d'appareil photo qui n'enregistre pas correctement dans la photothèque ou d'une application tierce gérant la photothèque. Les utilisateurs n'ont besoin que de quelques étapes simples

Astuce PHP : une ligne de code pour convertir les nombres en majuscules chinoises Astuce PHP : une ligne de code pour convertir les nombres en majuscules chinoises Mar 26, 2024 am 11:09 AM

Astuces PHP : une ligne de code pour convertir les nombres en majuscules chinoises Lors du développement de programmes PHP, vous devez parfois convertir les nombres en majuscules chinoises, par exemple convertir 12345 en « douze mille trois cent quarante-cinq ». Ci-dessous, nous présenterons un moyen simple et pratique d’implémenter cette fonction en une seule ligne de code. //Convertir les nombres en majuscules chinoises functionnum2chinese($num){$array=array('zero','one','two','trois','four',

Conseils pratiques : Comment utiliser la fonction trim en PHP pour traiter les espaces chinois Conseils pratiques : Comment utiliser la fonction trim en PHP pour traiter les espaces chinois Mar 27, 2024 am 11:27 AM

En programmation PHP, des espaces sont souvent rencontrés lors du traitement des chaînes, y compris les espaces chinois. Dans le développement réel, nous utilisons souvent la fonction trim pour supprimer les espaces aux deux extrémités d'une chaîne, mais le traitement des espaces chinois est relativement compliqué. Cet article explique comment utiliser la fonction trim en PHP pour traiter les espaces chinois et fournit des exemples de code spécifiques. Tout d’abord, comprenons les types d’espaces chinois. En chinois, les espaces comprennent non seulement les espaces anglais communs (espace), mais également d'autres espaces spéciaux.

Une analyse approfondie de la façon dont HTML lit la base de données Une analyse approfondie de la façon dont HTML lit la base de données Apr 09, 2024 pm 12:36 PM

HTML ne peut pas lire directement la base de données, mais cela peut être réalisé via JavaScript et AJAX. Les étapes comprennent l'établissement d'une connexion à la base de données, l'envoi d'une requête, le traitement de la réponse et la mise à jour de la page. Cet article fournit un exemple pratique d'utilisation de JavaScript, AJAX et PHP pour lire les données d'une base de données MySQL, montrant comment afficher dynamiquement les résultats d'une requête dans une page HTML. Cet exemple utilise XMLHttpRequest pour établir une connexion à la base de données, envoyer une requête et traiter la réponse, remplissant ainsi les données dans les éléments de la page et réalisant la fonction de lecture HTML de la base de données.

See all articles