3

所以我有一个 625 位长的数字要存储在 MySQL 中,它只包含 0 1 和 2 位数字。到目前为止,我发现存储它的最佳方式是 VARCHAR(625)。我怀疑有更好的方法来做到这一点,我只是不确定如何。

我想运行诸如“将文本的第 128 个字符更改为 1”之类的查询,而不必将文本查询到 PHP,从那里进行更改,然后将新文本写入数据库。

所以问题是:最简单的方法是什么,什么字段类型最适合这种东西?

提前致谢。

4

4 回答 4

3

如果您要执行“将文本的第 128 个字符更改为 1”之类的操作,那么我建议将数据类型保留为 VARCHAR(625)。如果长度始终为 625,那么您可以使用 CHAR。

这会将 MySQL 中的第 128 个字符更改为 1:

UPDATE your_table set your_column =
  CONCAT(SUBSTRING(your_column, 1, 127), '1', SUBSTRING(your_column, 129))
于 2013-03-23T17:48:52.517 回答
2

您可以使用 INSERT() 字符串函数

试试看

UPDATE tbl set field = INSERT(field,128,1,'1') where id = primary key
于 2013-03-23T17:50:34.350 回答
1

如果您只存储数字,为什么不使用 int(625) 而不是 varchar?

您可以使用替换命令,但您必须知道用什么替换

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, ‘find this string’, ‘replace found string with this string’);

如果您不知道要替换的确切内容,可以将“用此字符串替换找到的字符串”替换为子查询。使用 length 和 substr 来拆分,替换你想要的,然后重新连接在一起。

这个例子应该使我所说的更有意义 http://sqlfiddle.com/#!2/dbc21/2/0quey

于 2013-03-23T17:49:25.603 回答
0

一个复杂的替代方案:

将第 5 个字符替换为 'r',其中主键为 30:

update `myTable` set `myField`= regexp_replace(`myField`, '.', 'r', 5, 1) where `id`=30 limit 1
于 2020-01-13T04:56:36.943 回答