【问题标题】:Sqlite3(terminal) can't correctly decode charactersSqlite3(终端)无法正确解码字符
【发布时间】:2017-07-11 20:30:52
【问题描述】:

我正在学习一个教程,其中要求我从 sqlite3 数据库中创建、插入和读取数据(并使用 ascii 模式显示它)。

但是,当我发出读取命令时,我得到以下输出:

当我将它粘贴到文本编辑器时,它会产生 2GarfieldTabby18

我不确定是 sqlite3 本身,还是终端问题。谁能告诉我这些方形标志的专业名称是什么,它们为什么出现(我猜它与编码有关),以及如何修复它们?

我在 Ubuntu 16.04 上运行。 Sqlite 版本 3.11.0

在我的终端中运行locale 返回:

LANG=en_US.UTF-8
LANGUAGE=en_US:en_GB:en_AU:en_CA:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_GB.UTF-8
LC_TIME=en_GB.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_GB.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_GB.UTF-8
LC_NAME=en_GB.UTF-8
LC_ADDRESS=en_GB.UTF-8
LC_TELEPHONE=en_GB.UTF-8
LC_MEASUREMENT=en_GB.UTF-8
LC_IDENTIFICATION=en_GB.UTF-8
LC_ALL=

【问题讨论】:

  • 我猜是编码问题。看看this link,看看这些答案是否符合您的需求。我不太确定这是同一个问题。
  • 您是如何输入数据的,您是如何读取数据的? 001F 是 ASCII “单位分隔符”字符。
  • 这是sqlite3ascii 模式的正确行为。哪个教程?
  • @jgmh 感谢您的链接,但建议的答案似乎不起作用,正如@cl 在该答案之后的下一个答案中所建议的那样。 @varro 我已使用此命令插入数据:INSERT INTO pets(_id, name, breed, gender, weight) VALUES(1, "Tommy", "Pomeranian", 1, 4);。然后我使用.mode ascii,然后我使用SELECT * FROM pets; 读取数据。但在我使用.mode ascii 之前,我还读取了数据并得到了1|Tommy|Pomeranian|1|4。 @cl 它的 Udacity 的 Android 基础纳米学位。第 1.27 课。

标签: ubuntu terminal sqlite


【解决方案1】:

我遇到了同样的事情。我正在接受 Udacity 的培训,在 sqlite3 终端中我遇到了同样的事情。我也在运行 Ubuntu 16.04,我的 sqlite3 版本也是 3.11.0。

除了您想出的将其粘贴到编辑器中的解决方案之外,还有以下解决方案:

在 sqlite3 终端中当请求 .mode ascii 响应时,我在 ascii 文本中得到分隔符。为了避免这些迹象,我需要在 .mode ascii 之后输入 .separator "" "" 命令,然后再请求 select * from pets; (pets.db) 数据库。

这里唯一的问题是它是重复的。每次都必须重复同一行代码。

我想知道是否有永久解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多