Maison  >  Article  >  base de données  >  Introduction à la solution au problème des caractères chinois tronqués dans MySQL sous Ubuntu

Introduction à la solution au problème des caractères chinois tronqués dans MySQL sous Ubuntu

黄舟
黄舟original
2017-03-29 13:43:521138parcourir

Pour MySQLchinoisproblème de code tronqué (le mien est Ubuntu System), j'ai lu beaucoup de solutions sur Internet et fait de nombreux détours au cours du processus, j'ai donc pensé à écrire un article basé sur ma propre solution à partager avec des amis dans le besoin, donc cet article présente principalement comment résoudre le téléchargement d'Ubuntu les informations pertinentes sur le problème MySQL chinois tronqué. Les amis qui en ont besoin peuvent s'y référer

Découvrez le problème

J'ai étudié Django récemment lors de l'utilisation de pour insérer des données en conjonction avec des données MySQL, j'ai rencontré le problème suivant :

/usr/local/lib/python2.7/dist-packages/Django-1.11.dev20170117002028-py2.7.egg
/django/db/backends/mysql/base.py:109: Warning: Incorrect string value: '\xE6\x88\x90\xE5\x8A\x9F...' 
for column 'json' at row 1
 return self.cursor.execute(query, args)
[07/Feb/2017 12:15:21] "GET /index/ HTTP/1.1" 200 250
Le chinois ne peut pas être inséré dans l'encodage de la base de données MySQL~ ~ ! 🎜>

Modifier l'encodage de la base de données

mysql> show create database bangjob;
+----------+--------------------------------------------------------------------+
| Database | Create Database    |
+----------+--------------------------------------------------------------------+
| bangjob | CREATE DATABASE `bangjob` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> show variables like'%char%';
+--------------------------+----------------------------+
| Variable_name | Value  |
+--------------------------+----------------------------+
| character_set_client | utf8  |
| character_set_connection | utf8  |
| character_set_database | latin1  |
| character_set_filesystem | binary  |
| character_set_results | utf8  |
| character_set_server | latin1  |
| character_set_system | utf8  |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

Afficher les résultats modifiés

mysql> set character_set_database=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_server=utf8;
Query OK, 0 rows affected (0.00 sec)

Il n'y aura aucun problème pour continuer à insérer pour le moment

Ce serait formidable si les paramètres de l'auteur comme celui-ci sont invalides après le redémarrage de MySQL 🎜>
mysql> show variables like'%char%';
+--------------------------+----------------------------+
| Variable_name | Value  |
+--------------------------+----------------------------+
| character_set_client | utf8  |
| character_set_connection | utf8  |
| character_set_database | utf8  |
| character_set_filesystem | binary  |
| character_set_results | utf8  |
| character_set_server | utf8  |
| character_set_system | utf8  |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

Continuez à chercher ! pour les autres méthodes

Ajoutez les informations dans le nœud correspondant du fichier my.cnf :

Puis redémarrez MySQL :

sudo gedit /etc/mysql/my.cnf

Si vous pouvez redémarrer, vérifiez à nouveau l'encodage de la base de données :

[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
[mysql]
default-character-set=utf8

Ce serait formidable si cela est vrai. Les choses ne sont pas toujours aussi simples qu'on l'imagine :
/etc/init.d/mysql start

Lorsque j'ai redémarré le service MySQL, j'ai constaté qu'il était dans l'état d'attente
mysql> show variables like "%char%";
+--------------------------+----------------------------+
| Variable_name   | Value      |
+--------------------------+----------------------------+
| character_set_client  | utf8      |
| character_set_connection | utf8      |
| character_set_database | utf8      |
| character_set_filesystem | binary      |
| character_set_results | utf8      |
| character_set_server  | utf8      |
| character_set_system  | utf8      |
| character_sets_dir  | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

(PS : je suppose qu'un blocage ou quelque chose s'est produit à ce moment-là, exécutez :
va

lancer une exception

 :

mysql -u root -p
Je veux juste modifier l'encodage, pourquoi est-ce si difficile->->- > ;->->!!!

J'ai essayé de nombreuses méthodes (redémarrer, restaurer .Vérifiez l'état de mysql :

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
.

Ces méthodes ne peuvent pas résoudre le problème, commençons par le journal...

sudo /etc/init.d/mysql status

Trouvez le fichier /var/log/mysql/error.logmysql respawn/post-start, (post-start) process 55665


Continuez à trouver la solution pour


Réponse :

[ mysqld ] Suivant

est modifié. à

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Eh bien, MySQL peut enfin être redémarré, et l'encodage défini après le redémarrage prendra toujours effet

Bien sûr, la base de données précédemment créée doit être recréée. T_T

Parce que

l'encodage des données créé avant l'affichage est toujours latin1default-character-set=utf8' character_set_server=utf8

Résumé

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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