Php 如何在MySQL列类型varchar(1000)中正确写入文本?

Php 如何在MySQL列类型varchar(1000)中正确写入文本?,php,mysql,sql,varchar,Php,Mysql,Sql,Varchar,我在MySQL数据库中有一列VARCHAR(1000)。 因此,当PHP请求插入1000多个符号时,其余文本将被拒绝 在网站上,我放置了一个textarea,其maxlength=1000, 但是在服务器端,PHP使用htmlspecialchars函数解析提交的文本,因此如果文本是它被称为“nothing”,它就变成了它被称为“nothing” 问题是,文本可能会变成1000多个符号,即使它清楚地键入了1000个字符 您能帮我找到插入用户键入的所有字符的正确方法、正确函数等吗?在数据库中存储时

我在MySQL数据库中有一列VARCHAR(1000)。 因此,当PHP请求插入1000多个符号时,其余文本将被拒绝

在网站上,我放置了一个
textarea
,其
maxlength=1000
, 但是在服务器端,PHP使用
htmlspecialchars
函数解析提交的文本,因此如果文本是
它被称为“nothing”
,它就变成了
它被称为“nothing”

问题是,文本可能会变成1000多个符号,即使它清楚地键入了1000个字符


您能帮我找到插入用户键入的所有字符的正确方法、正确函数等吗?

在数据库中存储时不要使用
htmlspecialchars
。从数据库检索和写入浏览器时使用它(或
htmlspecialchars
)。

在数据库中存储时不要使用
htmlspecialchars
。在从数据库检索和写入浏览器时使用它(或
htmlentities
)。

您还必须注意UTF-8,它可能包含占用空间超过一个字节的字符

VARCHAR(例如over CHAR)背后的思想是,当字段未完全使用时,它允许数据库向磁盘存储更少的字节

例如,如果将“xx”写入VARCHAR(1000),则物理数据库中只存储两个字符,而不是1000。(注意,我在这里说的是字符而不是字节。实际字节数将更多,以允许更宽的可变宽度UTF-8代码、所需的字符串长度、任何字和磁盘缓冲区填充等。但显然,与使用字符相比,您将存储更少的字节。)


因此,让SQL为您做一些工作。将字段大小设置为3000或其他大小,或者至少设置为足够大,这样即使大部分符号的宽度超过8位,也不会出现问题。

您还必须注意UTF-8,因为UTF-8中的字符可能会占用超过一个字节的空间

VARCHAR(例如over CHAR)背后的思想是,当字段未完全使用时,它允许数据库向磁盘存储更少的字节

例如,如果将“xx”写入VARCHAR(1000),则物理数据库中只存储两个字符,而不是1000。(注意,我在这里说的是字符而不是字节。实际字节数将更多,以允许更宽的可变宽度UTF-8代码、所需的字符串长度、任何字和磁盘缓冲区填充等。但显然,与使用字符相比,您将存储更少的字节。)



因此,让SQL为您做一些工作。将字段大小设置为3000或其他大小,或至少足够大,即使大部分符号宽度超过8位,也不会出现问题。

使用type text代替VARCHAR使用VARCHAR的原因?不知道,但是类型VARCHAR似乎比文本更快使用类型text而不是varcharAny为什么使用VARCHAR而不是text?不知道,但是类型VARCHAR似乎比文本更快对于服务器每次调用函数(比如htmlentities)不是太过分了吗相反,一旦将正确的文本写入数据库,然后在没有过多函数的情况下从数据库中检索,这会使数据库更加通用。没有理由假设数据将只用于在网页上显示,您可能有其他应用程序将其放入CSV中,等等。您应该使用适合上下文的函数,而HTML函数只应在创建HTML时使用。我明白了。。。如果文本未正确转义,则在数据库中保存文本时遇到的错误如何?我只是个初学者,所以我只是问问hehe@LynnellEmmanuelNeri处理这个问题的最好方法是使用事先准备好的语句。如果不可行,您可以使用数据库的转义函数,例如,
mysql\u real\u escape\u string()
@barmar,我目前正在做的是首先使用PHP的filter\u SANITIZE\u string过滤任何文本,然后将其传递给mysqli\u escape\u string()。我做错了吗?对于服务器来说,每次调用函数(如htmlentities)都会有过多的杀伤力,而不是在数据库中写入正确的文本,然后在没有过多函数的情况下从数据库中检索?这会使数据库更通用。没有理由假设数据将只用于在网页上显示,您可能有其他应用程序将其放入CSV中,等等。您应该使用适合上下文的函数,而HTML函数只应在创建HTML时使用。我明白了。。。如果文本未正确转义,则在数据库中保存文本时遇到的错误如何?我只是个初学者,所以我只是问问hehe@LynnellEmmanuelNeri处理这个问题的最好方法是使用事先准备好的语句。如果不可行,您可以使用数据库的转义函数,例如,
mysql\u real\u escape\u string()
@barmar,我目前正在做的是首先使用PHP的filter\u SANITIZE\u string过滤任何文本,然后将其传递给mysqli\u escape\u string()。我做错了吗?这里你有一些不正确的信息。MySQL中
VARCHAR
的大小是可以存储的最大字符数,而不是字节数。如果列是在多字节字符集中声明的,MySQL理解多字节字符,因此绝对没有理由过大地调整列的大小。此外,没有“填充”,只有一个或两个字节用于存储列中存储的数据长度。但它与此相关,如果你没有把字段填满,那么你就把字节保存在磁盘上。。。3000=utf-8中每个字符1000 x 3个潜在字节。在
VARCHAR(1000)
中存储1000个字符“永远不会有问题”,即使每个字符恰好是3字节的unicode字符。我以为你在暗示