在db中存储实际换行符

时间:2014-07-16 10:38:34

标签: php mysql line-breaks

我的mysql数据库中有一个名为eol(type:varchar)的字段。

我在PHPMyAdmin中将其设置为默认\ r \ n。

如果我使用PDO进行SELECT我没有收到真正的换行符。

如果我像这样var_dump我的结果:

var_dump(unpack('C*',$eol));

结果是:

array(4) { 
[1]=> int(92) 
[2]=> int(114) 
[3]=> int(92) 
[4]=> int(110) 
} 

实际上是:

  • [反斜杠]
  • r
  • [反斜杠]
  • 名词

如果我var_dump一个真正的换行符

var_dump(unpack('C*',"\r\n"));

结果是:

array(2) { 
[1]=> int(13) 
[2]=> int(10) 
} 

如何在mysql中正确存储真正的换行符?

修改

@all如果我做的很简单

的var_dump( “\ r \ n”);

它将显示如下:

string(2) "
"

这很好,但我看不到真正的字符!

2 个答案:

答案 0 :(得分:3)

您不需要pack,使用双引号时会解析特殊字符:

var_dump("\r\n"); // 2 bytes CR LF, not 4 byte '\r\n' literal

你应该在MySQL中使用一个2字节的二进制字段而不是varchar。

$dbh->query("INSERT INTO x SET eol = '\r\n'");

通过phpMyAdmin插入\r\n,它会将字符转义为\\r\\n

答案 1 :(得分:1)

问题不在于mySQL数据库存储这些值的方式。 PHPMyAdmin只是一个GUI工具。因此,无论你输入什么都被认为是个别角色。

一个简单的例子是ASCII。 0x0A表示换行,但如果您使用PHPMyAdmin输入,则会获得这些字符而不是换行符。这与此类似。我已经使用查询将换行符存储到mysql列中而没有任何问题。

例如 -

insert into `evaluation_answer_versions` (`evaluation_answers_answer_id`, `question_version_id`, `answer_text`, `score`, `hidden`) values (1, 1, "\r\nabc", 1, 'n');

按预期工作。