2013-03-23 43 views
2

因此,我有一个625位数字的长号码存储在MySQL中,只包含0个1位和2位数字。到目前为止,我发现存储它的最好方式是VARCHAR(625)。我怀疑有更好的方法来做到这一点,我只是不知道如何。更改MySQL中文本的特定字符

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

所以问题是:做这件事最简单的方法是什么,以及哪种字段类型对于这类东西是最优的?

在此先感谢。

+0

HTTP的重复:// stackoverflow.com/questions/9813712/changing-a-specific-char-in-a-mysql-string。你会在那里找到你的答案。 – 2013-03-23 17:49:41

+0

不完全是,但是非常...我看了看周围,但没有找到任何东西。谢谢你 – 2013-03-23 18:00:12

+0

那是不是你想要的?请扩展它。 – 2013-03-23 18:01:55

回答

1

可以用户INSERT()字符串函数

试试看

UPDATE tbl set field = INSERT(field,128,1,'1') where id = primary key 
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)) 
+0

谢谢。我尝试了CHAR,但是它只能达到255,显然... – 2013-03-23 17:57:06

+0

就像 - 如果CHAR的值不是*和列一样长,那么迟早会出现问题。顺便说一句,从@new_developer中选择答案作为“最佳答案”是正确的 - 我忽略了'INSERT',这正是它为之制定的情况:) – 2013-03-23 18:10:29

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

+0

是否也替代int的工作? – 2013-03-23 17:57:30

+1

尝试它在sqlfiddle,让我们知道 – beardedlinuxgeek 2013-03-23 18:00:30

+0

似乎并不... – 2013-03-23 18:43:54