我在mysql中使用TEXT
列ut8_unicode_ci
来存储从互联网上删除的一些数据。
收集的文本来自不同语言的各种网站。
我对65535
列的TEXT
字节的最大长度感到困惑。
如何检查我插入列中的字符串是否超过该限制?
我正在使用strlen($str)
来检查字符串的长度,但是通过使用它确保数据不会被截断以适应列,因为我理解{{1}每个字符可以超过1个字节吗?
答案 0 :(得分:3)
编辑: 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手册的注释为a handy function for determining how many bytes are in a string。它似乎是使用MYSQL built in functions such as LENGTH
to do the job的唯一选择,这在这里很麻烦。
还有另外两种可能的解决方法。首先,您可以将字符串写入文件并检查文件的大小。其次,您可以在mb_strlen上强制执行ASCII编码,然后将每个字节视为一个字符,因此返回的字符数实际上是字节数。我没有测试过,所以先检查一下。让我们知道什么对你有用!
答案 1 :(得分:0)
结帐MySQL函数LENGTH():
返回字符串str的长度,以字节为单位。一个多字节 字符计为多个字节。这意味着对于一个字符串 包含五个双字节字符,LENGTH()返回10,而 CHAR_LENGTH()返回5.