我怎样才能开始使用utf8mb4而不是utf8?

时间:2017-10-21 12:49:00

标签: php mysql ubuntu utf-8

我试图做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有更多变量

记录我为所有数据库显示的mysql变量,在我使用booster(我的数据库)后,我发现有更多vars与utf8mb4: +--------------------------+--------------------+ | 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 | +--------------------------+--------------------+

1 个答案:

答案 0 :(得分:1)

您需要告诉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,则在客户端和数据库之间进行转换(如有必要)。