我试图做https://mathiasbynens.be/notes/mysql-utf8mb4
但是在我查询之后SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
告知此值:
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+--------------------------+--------------------+
当我尝试使用类似“🛍”的符号保存字符串时,它会向我发送消息
Incorrect string value: '\xF0
我读了很多关于它的内容,并尝试将存储此数据的列,表和数据库从utf8切换到utf8mb4。
我在
/etc/my.cnf
中设置此值[client]
default-character-set = utf8mb4
[mysqld]
skip-character-set-client-handshake
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
[mysql]
default-character-set = utf8mb4
我测试mysqld
ps -ax | grep mysqld
1409 ? Ssl 0:32 /usr/sbin/mysqld
9299 pts/1 S+ 0:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn mysqld
并且不确定,但是mysqld必须包含我的配置文件
/etc/my.cnf
的路径,并且它丢失。非常感谢您的帮助,我不会问是否不尝试我所知道的并且可以自己搜索的所有内容。
小更新:
选择数据库
use booster
后,我发现uf8mb4
还有更多变量在我确实使用booster(我的数据库)之后,记录了我为所有数据库显示的mysql变量的日志,我发现utf8mb4具有更多的vars:
+--------------------------+--------------------+| Variable_name | Value |+--------------------------+--------------------+| character_set_client | utf8mb4 || character_set_connection | utf8mb4 || character_set_database | utf8mb4 || character_set_filesystem | binary || character_set_results | utf8mb4 || character_set_server | latin1 || character_set_system | utf8 || collation_connection | utf8mb4_general_ci || collation_database | utf8mb4_unicode_ci || collation_server | latin1_swedish_ci |+--------------------------+--------------------+
最佳答案
您需要告诉PHP客户端您正在使用utf8mb4,而不是utf8。
如果使用mysqli,请执行$mysqli_obj->set_charset('utf8mb4');
如果使用PDO,请执行$db = new PDO('dblib:host=host;dbname=db;charset=utf8mb4', $user, $pwd);
之类的操作
或者,执行SET NAMES utf8mb4
这些中的任何一个都将说明客户端中的字节是UTF-8编码的。如果列定义不是utf8mb4,则如有必要,将在客户端和数据库之间进行转换。
关于php - 如何开始使用utf8mb4而不是utf8?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46863370/