我的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)
}
实际上是:
如果我var_dump一个真正的换行符
var_dump(unpack('C*',"\r\n"));
结果是:
array(2) {
[1]=> int(13)
[2]=> int(10)
}
如何在mysql中正确存储真正的换行符?
修改
@all如果我做的很简单
的var_dump( “\ r \ n”);
它将显示如下:
string(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');
按预期工作。