undefined
答案 0 :(得分:1)
正如一些人在注释中指出的那样,您的SQL中有一些看不见的字符(有时称为“ gremlins”)使它无效。这是内容的十六进制转储(使用macOS命令从问题中复制代码之后):
$ pbpaste | xxd -g1
00000000: 63 72 65 61 74 65 20 74 61 62 6c 65 20 70 72 6f create table pro
00000010: 64 75 63 74 28 0a 70 72 6f 64 75 63 74 69 64 20 duct(.productid
00000020: 69 6e 74 2c e2 80 a8 0a 64 65 73 63 72 69 70 74 int,....descript
^^ ^^ ^^ ^^^
00000030: 69 6f 6e 20 76 61 72 63 68 61 72 28 32 30 29 0a ion varchar(20).
00000040: 29 3b 0a e2 80 a8 69 6e 73 65 72 74 20 69 6e 74 );....insert int
00000050: 6f 20 70 72 6f 64 75 63 74 20 28 e2 80 a8 70 72 o product (...pr
00000060: 6f 64 75 63 74 69 64 2c e2 80 a8 64 65 73 63 72 oductid,...descr
^^ ^^ ^^ ^^^
00000070: 69 70 74 69 6f 6e 20 29 e2 80 a8 56 61 6c 75 65 iption )...Value
^^ ^^ ^^ ^^^
00000080: 73 20 28 20 34 32 20 2c 20 27 20 74 76 27 29 3b s ( 42 , ' tv');
00000090: 0a 45 52 52 4f 52 3a 20 20 63 6f 6c 75 6d 6e 20 .ERROR: column
000000a0: 22 64 65 73 63 72 69 70 74 69 6f 6e 22 20 6f 66 "description" of
000000b0: 20 72 65 6c 61 74 69 6f 6e 20 22 70 72 6f 64 75 relation "produ
000000c0: 63 74 22 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 ct" does not exi
000000d0: 73 74 st
(请注意,xxd
在右侧的文本显示中将不对应于可打印ASCII字符的字节表示为“。”。十六进制的与0a对应的“。”是换行符。)
十六进制代码e2 80 a8对应于unicode "line separator" character的UTF-8编码。我不知道那个角色是怎么进入那里的。您必须追溯该代码段的来源以弄清楚它们的添加位置。
我要避免将TextEdit用于源代码(以及配置文件等)。相反,我建议使用BBEdit或其他一些面向代码的编辑器。我认为即使在BBEdit的自由演示模式下,也可以通过选择查看菜单->文本显示->显示不可见项来显示(并让您删除)通常不可见的字符。
您还可以使用以下方法从macOS终端中的文本文件中删除非纯ASCII字符:
LC_ALL=C tr -d '\n\t -~' <infile.txt >cleanfile.txt
(用输入文件的路径/名称以及您要存储输出的位置替换infile.txt
和cleanfile.txt
。)警告:不要 not 尝试编写将内容清理回原始文件,将无法正常工作。另外,不要使用它来清除纯文本文件以外的任何内容(如果文件中的任何部分都不应该是文本部分,则可能会破坏这些部分)。保留原始文件作为备份,直到您确认“干净”版本能正常工作为止。
您还可以使用以下方法“清理”粘贴缓冲区:
pbpaste | LC_ALL=C tr -d '\n\t -~' | pbcopy
...所以只需从文本编辑器中复制相关代码,在Terminal中运行该代码,然后将清理后的版本粘贴回编辑器中即可。