Mysql
為什麼 SequelPro 只導入 130k 行中的 23k 行?
我在 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 的字元集問題並不新鮮
- https://stackoverflow.com/questions/8910528/understanding-mysql-charset-and-collation
- https://stackoverflow.com/questions/11185324/special-characters-get-lost-in-mysql-export-import
- http://forums.mysql.com/read.php?28,284657,284657
如果 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
。我想不那麼激進,只需更改列的字元集即可。