我正在使用 mysql 中的TEXT
列ut8_unicode_ci
来存储从互联网上抓取的一些数据。
收集的文本来自不同语言的不同站点。
65535
我对列的最大字节长度感到困惑TEXT
。
如何检查我插入列中的字符串是否超过该限制?
在我strlen($str)
用来检查字符串长度的那一刻,但是通过使用它是否可以确保数据不会被截断以适合列,因为我理解utf8_unicode_ci
每个字符可以超过 1 个字节?
编辑: OP 可以简单地使用strlen()
,因为它返回字节,而不是字符。见证:
$ cat test.php
#!/usr/bin/php -q
<?php
echo strlen("דותן כהן")."\n";
echo mb_strlen("דותן כהן", "UTF-8")."\n";
?>
$ ./test.php
15
8
在对这篇文章的评论中归功于deceze 。
旧帖如下:
PHP 手册的注释有一个方便的函数来确定字符串中有多少字节。它似乎是使用MYSQL 内置函数LENGTH
来完成这项工作的唯一替代方法,这在这里会很麻烦。
还有另外两种可能的解决方法。首先,您可以将字符串写入文件并检查文件的大小。其次,你可以对 mb_strlen 强制进行 ASCII 编码,然后它将每个字节视为一个字符,因此它返回的字符数实际上就是字节数。我没有测试过,所以先检查一下。让我们知道什么对您有用!
签出 MySQL 函数 LENGTH() :
返回字符串 str 的长度,以字节为单位。多字节字符计为多个字节。这意味着对于包含五个两字节字符的字符串,LENGTH() 返回 10,而 CHAR_LENGTH() 返回 5。