2012-08-13 31 views
1

我在這裏有一個非常奇怪的行爲。MySQL編碼字符串,並添加一個問號

我從PDF複製表格,表格被粘貼在Excel電子表格中。然後.xls文件保存爲.csv。最後,.csv通過PHP上傳到MySQL。一些文本在開頭處有一個隱藏的問號。像這樣:NEE13。我看不出任何異常,但只是爲了測試我做了一個插入與phpMyAdmin。 MySQL的笙歌說:

Warning: #1366 Incorrect string value: '\xEF\xBB\xBFNEE...' for column 'rid' at row 1. 

在數據庫中的結果值則是:?NEE13

任何有助於解決這個問題表示讚賞。謝謝。

+1

小心向我們展示導致錯誤的確切sql查詢? – 2012-08-13 06:28:21

+0

@BenRowe。你好。這是查詢:INSERT INTO'wattquotes_test'.'tbl_duostuos'('id','rid','state_id','network_id','nuoscharge_id','duos','tuos','nuos','year' )VALUES(NULL,'NEE13','6','13','1','2',NULL,NULL,'2015'); – ivantxo 2012-08-13 06:33:39

回答

3

你的文件開頭爲'EF BB BF'。它們被稱爲utf8魔術字節或BOM(字節順序標記)。

MySQL無法將這些字節解析爲正確的utf8符號,並將它們替換爲'?'標記。

只需在插入之前刪除這些字節,或者使用blob/varbinary字段來存儲您的文件。

+0

有沒有辦法通過Php編程實現它? – ivantxo 2012-08-13 06:50:05

+2

類似於:$ rid = preg_replace('/^\ xEF \ xBB \ xBF /','',$ rid); – CyberDem0n 2012-08-13 06:52:51

+0

謝謝。 preg_replace可以做到這一點。我只是想知道爲什麼我的文本有這些魔術字節。我認爲這是因爲從PDF複製和粘貼。 – ivantxo 2012-08-13 07:17:46