2017-08-16 32 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文件被正确读取,如果是这样的话。 –

相关问题