Php 以db存储实际线路中断
我的mysql数据库中有一个名为eol(type:varchar)的字段 我在PHPMyAdmin中将其设置为默认值\r\n 如果我使用PDO执行Php 以db存储实际线路中断,php,mysql,line-breaks,Php,Mysql,Line Breaks,我的mysql数据库中有一个名为eol(type:varchar)的字段 我在PHPMyAdmin中将其设置为默认值\r\n 如果我使用PDO执行选择,我不会收到真正的换行符 如果我像这样转储我的结果: var_dump(unpack('C*',$eol)); string(2) " " 结果是: array(4) { [1]=> int(92) [2]=> int(114) [3]=> int(92) [4]=> int(110) } 事实上: [反
选择
,我不会收到真正的换行符
如果我像这样转储我的结果:
var_dump(unpack('C*',$eol));
string(2) "
"
结果是:
array(4) {
[1]=> int(92)
[2]=> int(114)
[3]=> int(92)
[4]=> int(110)
}
事实上:
- [反斜杠]
- r
- [反斜杠]
- n
var_dump(unpack('C*',"\r\n"));
结果是:
array(2) {
[1]=> int(13)
[2]=> int(10)
}
如何在mysql中正确存储真正的换行符
编辑:
@如果我做的很简单
变量转储(“\r\n”)
它将显示如下:
var_dump(unpack('C*',$eol));
string(2) "
"
这很好,但我看不到真正的角色 您不需要
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
您不需要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
问题不在于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');
正常工作。问题不在于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');
工作如期。我从来没有遇到过你的问题。假设您有一个文本区域和换行符。您只需将它们保存在数据库中,就像它们一样,并用。就这样。@machineaddict这不是为了那个案子。我需要将换行符信息存储在单独的字段中,以便能够解析具有不同换行符的CSV文件。可能是phpmyadmin在您为默认值输入
\r\n
时逃逸了该值吗?那么,当您将它们保存为字符串\r\n
时,为什么要解包呢?我正在解包以进行调试有理由能看到真正的角色。我从来没有遇到过你的问题。假设您有一个文本区域和换行符。您只需将它们保存在数据库中,就像它们一样,并用。就这样。@machineaddict这不是为了那个案子。我需要将换行符信息存储在单独的字段中,以便能够解析具有不同换行符的CSV文件。可能是phpmyadmin在您为默认值输入\r\n
时逃逸了该值吗?那么,当您将它们保存为字符串\r\n
时,为什么要解包呢?我正在解包以进行调试能够查看实际字符的原因。如果使用2字节二进制字段PHPMyAdmin,则显示:字段eol的默认值无效\r\n。它将其处理为4个字节。通过phpMyAdmin输入\r\n
时,这是4个字节的文本,因为phpMyAdmin会转义字符。无法使用phpMyAdmin插入此文件。它将\r\n
更改为\\r\\n
。phpMyAdmin设置的默认值也被转义。您需要通过查询生成整个表。好的,您是对的。这是一个PHPMyAdmin问题。我删除了默认值并将其与我的记录(Fieldtype:Varchar)一起插入。结果是,在执行var_dump(unpack('C*',$eol')时,我收到了一个正确的换行符array(2){[1]=>int(13)[2]=>int(10)}
代码>!。对不起,你帮了我,但我不得不接受@nightgaunt的回答。它直接指向了这个问题。“您不需要解包”提示和“2字节二进制”提示没有解决问题。通过查询插入解决了这个问题。不过,非常感谢。@steven我上次编辑时指出,phpMyAdmin逃逸新行字符是32分钟前,而nightgaunt的答案是25分钟前。不管怎么说,我对你的决定很满意,我不认为这是针对个人的,也不太严肃地抱怨:-)很高兴你的问题解决了!如果使用2字节二进制字段,PHPMyAdmin将显示:字段eol的默认值无效\r\n。它将其处理为4个字节。通过phpMyAdmin输入\r\n
时,这是4个字节的文本,因为phpMyAdmin会转义字符。无法使用phpMyAdmin插入此文件。它将\r\n
更改为\\r\\n
。phpMyAdmin设置的默认值也被转义。您需要通过查询生成整个表。好的,您是对的。这是一个PHPMyAdmin问题。我删除了默认值并将其与我的记录(Fieldtype:Varchar)一起插入。结果是,在执行var_dump(unpack('C*',$eol')时,我收到了一个正确的换行符array(2){[1]=>int(13)[2]=>int(10)}
代码>!。对不起,你帮了我,但我不得不接受@nightgaunt的回答。它直接指向了这个问题。“您不需要解包”提示和“2字节二进制”提示没有解决问题。通过查询插入解决了这个问题。不过,非常感谢。@steven我上次编辑时指出,phpMyAdmin逃逸新行字符是32分钟前,而nightgaunt的答案是25分钟前。不管怎么说,我对你的决定很满意,我不认为这是针对个人的,也不太严肃地抱怨:-)很高兴你的问题解决了!是的,我也认识到了。默认值不起作用。我把它取了下来,把它镶了进去