我有一些这样的数据:
变音器 | 落后 |
---|---|
FLKSW | [无效的] |
聚苯乙烯 | FLKSW |
聚苯乙烯 | 聚苯乙烯 |
游戏机 | 聚苯乙烯 |
我想在以下条件下比较两列中的字符串值:如果它们共享至少 2 个字符,它们是相似的(分配一些值,比如 1)。否则,它们不相似。
所以在这个例子中,PPS 和 PSP 是相似的。
如何实现这种子字符串比较?
我知道一种方法是提取子字符串并手动比较它们,但感觉很笨拙,我不知道可能出现的最大字符数。
我有一些这样的数据:
变音器 | 落后 |
---|---|
FLKSW | [无效的] |
聚苯乙烯 | FLKSW |
聚苯乙烯 | 聚苯乙烯 |
游戏机 | 聚苯乙烯 |
我想在以下条件下比较两列中的字符串值:如果它们共享至少 2 个字符,它们是相似的(分配一些值,比如 1)。否则,它们不相似。
所以在这个例子中,PPS 和 PSP 是相似的。
如何实现这种子字符串比较?
我知道一种方法是提取子字符串并手动比较它们,但感觉很笨拙,我不知道可能出现的最大字符数。
我正在使用带有 Postgres 后端的 Django。
在 Django 模型中,我必须在 Charfields 上设置 max_length 属性,然后 Django ORM 在后端处理数据库。在很多情况下,这些都是相当小的字段(例如名称或城市名称等),我不认为它们会很长。该应用程序处理没有特别清理的现有数据。所以我不想设置类似的东西
name = models.Charfield(max_length=50, ...)
只是要意识到有人在该字段中写了三倍的名字,并且该字段的长度为 75 个字符。另一方面,我不想设置巨大的值并不必要地增加数据库大小只是为了省点麻烦。
我目前的想法是 Postgres 可能会保留一些最小的空间(例如 max_length=10 和 max_length=15 可能都占用相同的存储空间),所以我会将 max_length 设置为那个最小大小(或它的低倍数)。
你推荐什么,为什么?
我正在尝试找到一种方法来遍历我的所有表并将每个 charvar[n] 更改为 text 并将 charvar[][n] 更改为 text[]。但是,只能找到针对特定表和列或特定列名更改它的方法。使用 postgres 10. 有什么建议吗?
谢谢
我错误地将 unicode 文本存储到表格的varchar
列中,现在它显示为问号 (???)。
是否可以从列而不是问号中获取我们的主要信息???
postgresql中各种数据类型的大小限制是多少?我在某处看到 for character varying(n)
,varchar(n)
n
必须在 1 到 10485760 之间。这是真的吗?
和的有效尺寸是character(n)
多少?char(n)
text
在 Twitter 交流中,Simon West向Brandur询问,
出于兴趣,为什么要使用
email TEXT CHECK (char_length(email) <= 255)
而不是email VARCHAR(255)
?不是我以前见过的模式
布兰杜尔回应说,
好问题!
(1) VARCHAR 和 TEXT 在 Postgres 中的性能相同(请参阅https://www.postgresql.org/docs/current/static/datatype-character.html上的“提示”框……)。 .
(2) 如果你想改变长度,
ALTER TABLE
需要一个独占锁(见https://www.postgresql.org/docs/current/static/sql-altertable.html ...)。改变CHECK
是瞬间的。当回答一个引起质疑的问题text CHECK (char_length(email) <= 255)
时varchar(255)
两个声明中的第一个声明(粗体)是否严格正确?
如果对第二个索赔感兴趣,请查看此问题。