Sqlite3 在导入后损坏了一些字符
Sqlite3 corrupts some chars after importing
我有一个制表符分隔的文件,其中包含如下记录:
no Newcastle 1 NULL NULL NULL
uk Ньюкасл 1 NULL NULL NULL
ja ニューカッスル 1 NULL NULL NULL
要将它们导入 sqlite,我使用:
create table cities (country text, name text, count integer...);
.separator ' '
.import file cities
(其中“ ”上面包含一个制表符)。该文件似乎可以正常导入,但一些非 ASCII 字符已损坏,尤其是在字符串末尾,并被问号替换。
no Newcastle 1 NULL NULL NULL
uk Ньюкасл 1 NULL NULL NULL
ja ニューカッ? 1 NULL NULL NULL
损坏发生在导入时。我尝试在导入前使用 PRAGMA encoding = "UTF-8";,但没有帮助。有什么想法吗?
根据以下用户 CL 的请求进行更新
输入文件的一部分的 Hexdump(与上面显示的相同部分,带有一些与此处无关的附加数值;在 ASCII 列中,损坏的字符位于 "ja" 之后的“1”之前):
00008180 30 30 30 30 30 30 32 30 37 33 32 33 39 09 31 34 |0000002073239.14|
00008190 38 36 33 39 36 31 33 34 35 33 33 33 36 35 38 38 |8639613453336588|
000081a0 09 75 6b 09 d0 9d d1 8c d1 8e d0 ba d0 b0 d1 81 |.uk.............|
000081b0 d0 bb 09 31 09 4e 55 4c 4c 09 4e 55 4c 4c 09 4e |...1.NULL.NULL.N|
000081c0 55 4c 4c 0a 31 32 30 30 30 30 30 30 30 30 30 30 |ULL.120000000000|
000081d0 32 30 37 33 32 34 30 09 31 34 38 36 33 39 36 31 |2073240.14863961|
000081e0 33 34 35 33 33 33 36 35 38 38 09 6a 61 09 e3 83 |3453336588.ja...|
000081f0 8b e3 83 a5 e3 83 bc e3 82 ab e3 83 83 e3 82 b9 |................|
00008200 e3 83 ab 09 31 09 4e 55 4c 4c 09 4e 55 4c 4c 09 |....1.NULL.NULL.|
00008210 4e 55 4c 4c 0a 31 32 30 30 30 30 30 30 30 30 30 |NULL.12000000000|
00008220 30 32 30 37 33 32 34 31 09 31 34 38 36 33 39 36 |02073241.1486396|
违规记录的 select 十六进制(名称)结果:
hex(name)
--------------------------------------
31323030303030303030303032303733323430
这与导入无关;使用 .width
.
时,sqlite3
命令行工具无法正确截断字符串
我有一个制表符分隔的文件,其中包含如下记录:
no Newcastle 1 NULL NULL NULL
uk Ньюкасл 1 NULL NULL NULL
ja ニューカッスル 1 NULL NULL NULL
要将它们导入 sqlite,我使用:
create table cities (country text, name text, count integer...);
.separator ' '
.import file cities
(其中“ ”上面包含一个制表符)。该文件似乎可以正常导入,但一些非 ASCII 字符已损坏,尤其是在字符串末尾,并被问号替换。
no Newcastle 1 NULL NULL NULL
uk Ньюкасл 1 NULL NULL NULL
ja ニューカッ? 1 NULL NULL NULL
损坏发生在导入时。我尝试在导入前使用 PRAGMA encoding = "UTF-8";,但没有帮助。有什么想法吗?
根据以下用户 CL 的请求进行更新
输入文件的一部分的 Hexdump(与上面显示的相同部分,带有一些与此处无关的附加数值;在 ASCII 列中,损坏的字符位于 "ja" 之后的“1”之前):
00008180 30 30 30 30 30 30 32 30 37 33 32 33 39 09 31 34 |0000002073239.14|
00008190 38 36 33 39 36 31 33 34 35 33 33 33 36 35 38 38 |8639613453336588|
000081a0 09 75 6b 09 d0 9d d1 8c d1 8e d0 ba d0 b0 d1 81 |.uk.............|
000081b0 d0 bb 09 31 09 4e 55 4c 4c 09 4e 55 4c 4c 09 4e |...1.NULL.NULL.N|
000081c0 55 4c 4c 0a 31 32 30 30 30 30 30 30 30 30 30 30 |ULL.120000000000|
000081d0 32 30 37 33 32 34 30 09 31 34 38 36 33 39 36 31 |2073240.14863961|
000081e0 33 34 35 33 33 33 36 35 38 38 09 6a 61 09 e3 83 |3453336588.ja...|
000081f0 8b e3 83 a5 e3 83 bc e3 82 ab e3 83 83 e3 82 b9 |................|
00008200 e3 83 ab 09 31 09 4e 55 4c 4c 09 4e 55 4c 4c 09 |....1.NULL.NULL.|
00008210 4e 55 4c 4c 0a 31 32 30 30 30 30 30 30 30 30 30 |NULL.12000000000|
00008220 30 32 30 37 33 32 34 31 09 31 34 38 36 33 39 36 |02073241.1486396|
违规记录的 select 十六进制(名称)结果:
hex(name)
--------------------------------------
31323030303030303030303032303733323430
这与导入无关;使用 .width
.
sqlite3
命令行工具无法正确截断字符串