2017-05-01 63 views
1

當我使用utf8/utf8mb4編碼進行備份時,我的表查詢以無法識別的字符返回。你如何使用UTF8編碼mysqldump特定表格?

這裏是我正在使用C#備份命令:

"-u{0} -p{1} -c -e --default-character-set=utf8 dbname tablename" 

輸出:

-- MySQL dump 10.13 Distrib 5.6.24, for Win32 (x86) 
-- 
-- Host: localhost Database: dbname 
-- ------------------------------------------------------ 
-- Server version 5.6.24 

/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 
/*!40101 SET NAMES utf8 */; 
/*!40103 SET @[email protected]@TIME_ZONE */; 
/*!40103 SET TIME_ZONE='+00:00' */; 
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */; 

-- 
-- Table structure for table `tablename` 
-- 

DROP TABLE IF EXISTS `tablename`; 
/*!40101 SET @saved_cs_client  = @@character_set_client */; 
/*!40101 SET character_set_client = utf8 */; 
CREATE TABLE `tablename` (
    `Sno` int(11) NOT NULL DEFAULT '0', 
    `ShopItemcode` varchar(255) DEFAULT NULL, 
    `Itemname` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`Sno`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
/*!40101 SET character_set_client = @saved_cs_client */; 

-- 
-- Dumping data for table `tablename` 
-- 

LOCK TABLES `tablename` WRITE; 
/*!40000 ALTER TABLE `tablename` DISABLE KEYS */; 
INSERT INTO `tablename` VALUES (992,'JPBC20','ஜீனà¯à®¸à¯(பூடà¯à®•à®Ÿà¯)சி20'),(993,'JPBC22','ஜீனà¯à®¸à¯(பூடà¯à®•à®Ÿà¯)சி22'),(994,'JPBC24','ஜீனà¯à®¸à¯(பூடà¯à®•à®Ÿà¯)சி24'); 

但是,當我需要備份XAMPP意味着字符返回良好。

+0

我寫了一個C#本地庫,你可以試試看。它是MySqlDump的替代方法:https://github.com/adriancs2/MySqlBackup.Net – mjb

回答

1

泰米爾語?從ஜீன...開始?你有Mojibake。也就是說,在路徑的某個地方,某種東西被宣佈爲latin1而不是utf8

閱讀關於Mojibake這裏:Trouble with utf8 characters; what I see is not what I stored。看看它的建議是否提供瞭解決方案。

有可能是「雙編碼」。 SELECT HEX(Itemname) ...; ஜீன

E0AE9C E0AF80 E0AEA9在正確存儲UTF8,或
C3A0 C2AE C593 C3A0 C2AF E282AC C3A0 C2AE C2A9如果雙重編碼。

要修復數據,如果你不能輕易重裝,看到 http://mysql.rjweb.org/doc.php/charcoll#fixes_for_various_cases

+0

你對泰米爾人。感謝編碼的細節。 – mathi

0

我成功如下:

導出我的表爲latin1的字符集,它返回我的查詢不錯,但只有其他語言值作爲雙重編碼返回。當我使用utf8字符集導入查詢時,它會以原始形式返回雙重編碼的數據。

這樣,

mysqldump -uuser -ppassword --default-character-set=latin1 

mysql -uuser -ppassword --default-character-set=utf8