Maison > Article > base de données > Que faire si le fichier d'importation MySQL contient des caractères chinois tronqués
La solution aux caractères chinois tronqués dans les fichiers d'importation mysql : créez d'abord une base de données et spécifiez l'encodage ; puis avant d'importer le fichier de base de données, spécifiez les noms des jeux d'encodage utf8.
Recommandé : "Tutoriel vidéo MySQL"
Poursuite de la question d'hier, une fois la base de données configurée, la table de requête trouvé Les caractères chinois sont tronqués et j'ai essayé plusieurs méthodes sur Internet mais je n'ai pas pu le résoudre.
On dirait qu'il y a un problème avec le fichier SQL importé, alors pensez à l'envers, utilisez des commandes pour créer une base de données, ajoutez des données, puis exportez-la pour voir ce qui se passe.
Une erreur a été signalée lors de l'insertion des données dans le tableau : ERROR 1366 (HY000): Incorrect string value: 'xE6xB5x8BxE8xAFx95' for column 'bookname' at row 1
C'est étrange, regardez la structure du tableau : show create table book;
Je l'ai vu, j'ai changé le format d'encodage latin1 que je ne voulais pas voir de manière décisive, et j'ai passé la commande : alter table book default character set utf8;
Après le changement, j'ai vu un résultat rafraîchissant. L'encodage du tableau a été modifié, mais il y en avait. toujours un "C'est quoi ce bordel ?", le champ a un latin tronqué1 :
Modifiez-le à nouveau de manière décisive, passez la commande : alter table book change bookname bookname varchar(32) character set utf8;
Ne le regardez pas après le changement, essayez de l'insérer les données directement :
insert into book (id,bookname,size,price) values (1,"测试",2,3) ;
Insertion réussie, vérifiez si les données sont toujours tronquées en chinois et constatez qu'elles ne sont pas tronquées :
Alors commençons. Passez à l'étape suivante, exportez le fichier sql, entrez dans le répertoire bin de mysql et lancez l'exportation via la commande. Ce processus nécessite la saisie du mot de passe
E:\mysql-5.7.28-winx64\bin>mysqldump -u root -p test > test.sql Enter password: *******Le format d'encodage du fichier et du tableau exportés est utf8. Comparez-le avec le fichier précédemment importé. Je ne vois aucun problème.
Ensuite, c'est le processus d'importation des fichiers avant. En plus du problème de création de la base de données, vérifiez la structure de la base de données mydb de mydb.sql importée auparavant. C'est effectivement faux :
mysql> use mydb; Database changed mysql> show variables like 'character_set_database'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | character_set_database | latin1 | +------------------------+--------+ 1 row in set, 1 warning (0.00 sec)Donc je. je l'ai modifié :
alert database mydb character set utf8;
Ensuite, j'ai vérifié l'encodage de la table et j'ai trouvé quelque chose d'étrange :
mysql> show create table sp_user_cart; +--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | sp_user_cart | CREATE TABLE `sp_user_cart` ( `cart_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '涓婚敭', `user_id` int(11) unsigned NOT NULL COMMENT '瀛﹀憳id', `cart_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '璐?墿杞﹁?鎯呬俊鎭?紝浜岀淮鏁扮粍搴忓垪鍖栦俊鎭', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, `delete_time` timestamp NULL DEFAULT NULL, PRIMARY KEY (`cart_id`) ) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8Comment est sorti utf8mb4_unicode_ci...
Ensuite, j'ai modifié l'encodage et la requête, mais il avait toujours tort. Je me suis souvenu que j'avais créé la base de données auparavant, peut-être que j'avais oublié de définir l'encodage, que les éléments importés sont tronqués ou que la configuration de mon.ini est incorrecte, essayez de recommencer à zéro et d'utiliser le processus correct.
show variables like 'character%';
Je l'ai trouvé très déroutant :
mysql> show variables like 'character%'; +--------------------------+----------------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------------+ | character_set_client | gbk | | character_set_connection | gbk | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | gbk | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | D:\mysql-5.7.29-winx64\share\charsets\ | +--------------------------+----------------------------------------+a commencé à changer et a obtenu le résultat grâce à une série de jeux
set character_set_client = utf8;
+--------------------------+----------------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | utf8 | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | D:\mysql-5.7.29-winx64\share\charsets\ | +--------------------------+----------------------------------------+
创建数据库并制定编码:CREATE DATABASE test2 CHARACTER SET utf8 COLLATE utf8_general_ci;
使用:use test2
在导入数据库文件之前,制定编码set names utf8;
导入:source F:xxxx\xxxx\mydb.sql;
不算漫长的等待之后,查询,不乱码了
mysql> select * from sp_role; +---------+---------------+--------------------------------------------------------------------------------------------- ------------------------------------------------------+----------------------------------------------------------------- ------------------------+--------------------+ | role_id | role_name | ps_ids | ps_ca | role_desc | +---------+---------------+--------------------------------------------------------------------------------------------- ------------------------------------------------------+----------------------------------------------------------------- ------------------------+--------------------+ | 30 | 主管 | 101,0,104,116,115,142,143,144,121,122,123,149,102,107,109,103,111,129,130,134,135,138,139,14 0,141,112,147,125,110,131,132,133,136,137,145,146,148 | Goods-index,Goods-tianjia,Category-index,Order-showlist,Brand-in dex | 技术负责人 | | 31 | 测试角色 | 101,0,104,105,116,117,115,142,143,144,121,122,123,149,103,111,129,134,138,112,147 | Goods-showlist,Goods-tianjia,Category-showlist,Order-showlist,Or der-dayin,Order-tianjia | 测试角色描述 | | 34 | 测试角色2 | 0,105,116,142,143,122 | NULL | 测试描述12 | | 39 | 大发送到 | 101,0,104,105,116 | NULL | 阿斯蒂芬 | | 40 | test | 102,0,107,109,154,155,145,146,148 | NULL
实战项目可以继续进行,遂生法喜。
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!