2017-08-16 108 views
1

我在我的網站上運行一些php,從SQL數據庫中提取內容。查詢正在工作,所有在那裏都很好。我遇到的唯一問題是,當我使用phpmyadmin上傳我的數據集(.csv格式)時,發生錯誤會丟失特定行後的所有內容。據推測,這是由於SQL在該特定行中識別出比預期更多的列所致。不幸的是,這不僅僅是一次發生。我似乎無法確切地發現問題是什麼,但很可能是由包含分隔符的列'description'中的某些值導致的,這些分隔符將其分成多個列。希望通過刪除/替換所有這些分隔符可以解決問題。雖然我對SQL很陌生,但我似乎無法找到一個能夠簡單列出我應該考慮的所有潛在分隔符的源代碼。有沒有人能幫助我?SQL:什麼是所有的分隔符?

先謝謝你,保重!

Regards

+0

phpMyAdmin使用['LOAD DATA INFILE'](https://dev.mysql.com/doc/refman/5.7/en/load-data.html)將CSV文件導入到數據庫中(並且它不保守祕密。) – axiac

+0

您可以通過許多不同的事物進行分隔。我見過管道|和逗號,以及製表符,固定空間,tildas〜和冒號: – ApolloSoftware

+0

而不是猜測,**使用你的眼球,並用文本編輯器簡單地檢查文件**。對於「什麼是正確的分隔符」這個問題,只能有一個正確的答案?而你的眼球是這項工作的最佳工具。 –

回答

1

從個人的經驗,一旦可以劃分許多不同的東西。我見過管道|和逗號,以及製表符,固定空間,tildas〜和冒號:。

直接從https://en.wikipedia.org/wiki/Delimiter-separated_values摘自:

「由於它們的廣泛使用,逗號和製表符分隔的文本文件,可以通過若干種應用,包括大多數電子表格程序和統計包打開,有時甚至不需要用戶[5] [6]儘管每個應用程序都有自己的數據庫設計和自己的文件格式(例如accdb或xlsx),但它們都可以將DSV文件中的字段映射到它們的自己的數據模型和格式

通常一個分隔的文件格式是由一個規範來表示一些規範提供了約定爲avoidi ng分隔符碰撞,其他人則不會。分隔符碰撞是一個問題,當一個打算作爲數據一部分的字符被解釋爲分隔符時會發生。逗號和空格分隔的格式通常會遇到這個問題,因爲在許多情況下,這些字符是數據字段的合法部分。

大多數此類文件通過將所有數據字段放在雙引號中,或僅引用包含分隔符字符的數據字段來避免定界符衝突。製表符分隔的文本文件的一個問題是製表符難以與空格區分;因此,當人們嘗試手動編輯文件時,有時會出現文件被破壞的問題。另一組問題是由於文件結構中的錯誤而發生的,通常是在將文件導入數據庫期間(在上例中,這種錯誤可能是學生的名字丟失)。

根據數據本身的不同,使用非標準字符(例如波浪號(〜)作爲分隔符)可能會有所幫助。隨着網站和其他將代碼片段存儲在數據庫中的應用程序的普及,僅僅使用「在每個超鏈接和圖像源代碼中出現的」並不足以避免這種類型的衝突。由於冒號(:),冒號(;),管道(|)和許多其他字符也被使用,找到一個在其他地方沒有使用的字符可能非常具有挑戰性。「

+0

感謝您的回答。我會嘗試設置〜作爲列分隔符,並在值中隨處取出。看看是否有效。祝你有個好的一天! –

+0

CSV提供了一個簡單的機制,不需要獨特的角色,而且令人驚訝的是有多少人似乎沒有意識到這一點。如果一個值包含一個逗號,請將其放在'「...」'雙引號內。如果一個值包含''''雙引號,則複製它。「Joe」*正確* CSV中的Man「Smith,Jr.'是」Joe「」The Man「」Smith,Jr.「'使用'FIELDS。使用'LOAD DATA INFILE'封裝''''應該會導致*正確的* CSV文件被正確讀取,如果是這樣的話。 –

相關問題