Mysql

為什麼 SequelPro 只導入 130k 行中的 23k 行?

  • August 12, 2017

我在 Mac OS X 上使用 SequelPro for MySQL。我使用導入功能將 130k .csv 文件上傳到我的數據庫。一切似乎都正常,然後我收到消息:

文件讀取錯誤:讀取文件時發生錯誤,因為無法使用您選擇的編碼(自動檢測 - Unicode (UTF-8))讀取文件。僅導入了 23,000 行。

當我點擊“Ok”時,其他一切似乎都相對正常,我只是失去了大約 107,000 行。

關於它可能是什麼的任何想法?也許我應該在導入期間使用自動檢測以外的東西?我認為在實際的 .csv 文件中可能有一些額外的逗號浮動,但我擺脫了這些逗號,同樣的事情發生了。

在 130,000 行中,肯定有一些非英文字元的可能性。MySQL 不接受哪些,我將如何找到和替換它們?

這是我在執行字元集查詢時得到的:

show variables like 'character_set%';
Variable_name               Value
character_set_client        latin1
character_set_connection    latin1
character_set_database      latin1
character_set_filesystem    binary
character_set_results       latin1
character_set_server        latin1
character_set_system        utf8
character_sets_dir          /usr/local/mysql-5.6.10-osx10.7-x86_64/share/charsets/

這可能取決於您生成 CSV 文件的位置。如果 CSV 文件是在 Windows 機器上生成的,則可能存在一些字元集問題

請參閱https://code.google.com/p/sequel-pro/issues/detail?id=1629

請參閱以下網址,因為 SequelPro 的字元集問題並不新鮮

如果 CSV 文件是在另一台 Mac OSx 伺服器上生成的,您應該不會遇到此問題。

您可能不得不求助於設置預設字元集以匹配該 CSV 文件。聽起來很奇怪:

請執行此查詢,您將看到如下內容:

mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| 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)

mysql>

還可以看到數據庫的字元集

mysql> show create database mydb\G
*************************** 1. row ***************************
      Database: mydb
Create Database: CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET latin1 */
1 row in set (0.00 sec)

mysql>

也許您應該載入另一個具有匹配字元集的表:

CREATE TABLE anothertable LIKE mytable;

更改整個表的字元集

ALTER TABLE anothertable CONVERT TO CHARACTER SET charset_name [COLLATE collation_name];

或更改列的字元集

ALTER TABLE anothertable MODIFY col1 CHAR(50) CHARACTER SET utf8;

然後,讓 SequalPro 載入anothertable

我想不那麼激進,只需更改列的字元集即可。

引用自:https://dba.stackexchange.com/questions/40638