【问题标题】:Difference in string length (database - .txt file)字符串长度的差异(数据库 - .txt 文件)
【发布时间】:2017-04-24 11:39:25
【问题描述】:

我正在从事一个项目,我从数据库中加载记录并对其运行一些验证检查,例如模式搜索,它会返回某个模式的索引。记录本身可能非常大,一个字段最多 200 万个字符。为此,我将一些测试数据复制到纯文本文件中并保存在本地。

我遇到的问题是,当我运行测试时,我从本地文本文件中读取的字符串与 MySQL 数据库中的字符串长度不同。从 SQL 数据库返回的索引比从我本地存储的纯文本文件返回的索引低(完整的字符串更短)。

数据库字段示例(type = mediumtext)

11:00 i have started entering into this database field
12:00 continueing
13:00 some more
14:00 end of database work

当我检查数据库字段的长度时(使用select length(field)),它告诉我它的长度是 115

当我将数据库字段的确切内容粘贴到 Notepad++ 中时,它告诉我有 118 个字符。

我知道这不是一个固定的差异,因为我的代码返回的索引差异随着我进入长字符串而增加。

我的猜测是 MySQL 存储换行符/空格/制表符的方式与 .txt 文件不同。

但这只是一个疯狂的猜测。

感谢任何帮助。 提前致谢

【问题讨论】:

  • 让我猜猜:数据库使用\n,文件使用\r\n,所以前三行有另外三个\r ...
  • “我的猜测是 MySQL 存储换行符/空格/制表符的方式与 .txt 文件不同。但这只是一个疯狂的猜测。” 为什么你只猜测?你为什么不调试你的代码?
  • 因为我不知道调试此类问题的正确程序是什么,所以我将阅读\n vs \r\n
  • 嗯,调试这种情况和其他情况没有太大区别。只需设置一个断点并查看数据库中字符串的字符数组和文件中的字符串。你会看到那里的差异。
  • 要么检查两个字符串的 char 数组,要么检查两者的字节数组。他们告诉你他们包含的每个字符/字节,其中有一个额外的条目。比如 "[97, 98, 99, 10]" ("abc\n") 与 "[97, 98, 99, 13, 10]" ("abc\r\n")。

标签: java mysql database text-files


【解决方案1】:

因为您已经发现数据库使用 \n 作为换行符,而文本文件使用 \r\n 作为换行符(感谢 Tom)。我为你找到了一个你可以使用的解决方案。

您可以将 \n 替换为 \r\n,使其与您的文本文件匹配。 您可以在选择查询中使用:
REPLACE(column, '\n', '\r\n')

【讨论】:

    猜你喜欢
    • 2019-09-23
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    相关资源
    最近更新 更多