列上的mysql最大长度并确保我没有使用utf8_unicode_ci - PHP来超过这个限制?

had*_*ley 5 php mysql string unicode text

我正在使用mysql中的一TEXTut8_unicode_ci来存储从互联网上删除的一些数据.

收集的文本来自不同语言的各种网站.

65535TEXT列的最大字节长度感到困惑.

如何检查我插入列中的字符串是否超过该限制?

在我strlen($str)用来检查字符串长度的那一刻,但是通过使用它确保数据不会被截断以适应列,因为我理解utf8_unicode_ci每个字符可以超过1个字节?

dot*_*hen 4

编辑: OP 可以简单地使用,strlen()因为它返回字节,而不是字符。证人:

\n\n
$ cat test.php\n#!/usr/bin/php -q\n<?php\necho strlen("\xd7\x93\xd7\x95\xd7\xaa\xd7\x9f \xd7\x9b\xd7\x94\xd7\x9f")."\\n";\necho mb_strlen("\xd7\x93\xd7\x95\xd7\xaa\xd7\x9f \xd7\x9b\xd7\x94\xd7\x9f", "UTF-8")."\\n";\n?>\n\n$ ./test.php \n15\n8\n
Run Code Online (Sandbox Code Playgroud)\n\n

感谢deceze对这篇文章的评论。

\n\n

旧帖如下:

\n\n

PHP 手册的注释中有一个方便的函数,用于确定字符串中有多少字节。这似乎是使用MYSQL 内置函数来LENGTH完成这项工作的唯一替代方案,这在这里会很麻烦。

\n\n

还有另外两种可能的解决方法。首先,您可以将字符串写入文件并检查文件的大小。其次,您可以对 mb_strlen 强制进行 ASCII 编码,然后它将把每个字节视为一个字符,因此它返回的字符数实际上是字节数。我还没有测试过这个,所以先检查一下。让我们知道什么对您有用!

\n