今天我今天遇到了PHP和MySQL(here is the question)的问题,这个问题已经解决,但它唤醒了一个新的,更理论化的问题。
问题是在MySQL数据库中我有一个类型为VARCHAR(64)
的字段。当尝试从php脚本插入一个字符串时,完整的字符串超过64个字节,使var_dump
证明它有71个。但是,这是我不明白的,运行完全相同的查询,与完全相同的字符串,但从phpmyadmin手动,它确实适合64字节的SQL字段。
所以,这是问题所在。 有什么理由说明为什么php中的相同字符串比直接插入数据库需要更多内存?
编辑:有人建议复制与charset相关的问题。 MySQL中的charset是utf8_general_ci。在PHP中我没有定义字符集,但是如果我是print(mb_detect_encoding($string));
我得到它是ASCII编码的。可能这是原因吗?如果我认为ASCII占用的内存少于utf8,我有多难? (无论如何,在脚本中我有mysqli_set_charset($con,"utf8");
所以它应该在查询之前转换为utf8)