【问题标题】:How can I start use utf8mb4 instead of utf8?如何开始使用 utf8mb4 而不是 utf8?
【发布时间】:2017-10-21 12:49:00
【问题描述】:

我试着做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(我的数据库)之后,我发现 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 | +--------------------------+--------------------+

【问题讨论】:

标签: php mysql ubuntu utf-8


【解决方案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,则在必要时将在客户端和数据库之间进行转换。

【讨论】:

  • 谢谢,我同时使用 PHP 和 NodeJS,所以先尝试设置名称。
  • 我发现use booster (我正在使用的数据库)之后有更多带有utf8mb4的变量
  • 所以正如我所见——我也只需要从 latin1 更新为 utf8mb4(或 utf8)——我看到了 bash 代码,它通过执行数据库转储并用被替换的字符导入回来来替换它。跨度>
  • 当您以root 或其他SUPER 用户身份连接时,init_connect 不会执行。
  • 是的,谢谢,我创建了一个具有插入、更新、删除权限的新非 root 用户,它适用于它但我尝试在 PMA 中插入,它也适用,因为我知道 PMA 使用 root 用户和它效果很好
猜你喜欢
  • 2019-04-06
  • 2016-10-10
  • 2021-12-08
  • 2016-11-18
  • 2015-10-18
  • 1970-01-01
  • 2018-01-29
  • 2016-02-16
  • 2016-05-31
相关资源
最近更新 更多