php - 如何强制 mySQL 数据库存储这个特殊字符 : ╠?

标签 php mysql pdo phpmyadmin special-characters

我正在使用 php 将这个变量插入到 mySQL 数据库中:

$name="Ele ╠phant";


 $db = new PDO("mysql:host=".DBHOST.";port=8889;dbname=".DBNAME, DBUSER, DBPASS);
 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $db -> exec("set names utf8");

 $sql = "INSERT INTO data (name) values(?) ";
 $q = $pdo->prepare($sql);
 $q->execute(array($name));

我希望它完全像这样(Ele ╠phant)存储在数据库中。 但是通过 phpMyadmin 我看到它不是这样存储的:

Ele?phant

我的排序规则是 utf8_general_ci

我测试了另一种方法:

 $db = new PDO("mysql:host=".DBHOST.";port=8889;dbname=".DBNAME, DBUSER, DBPASS);
 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $db -> exec("set names utf8mb4");

 $sql = "INSERT INTO data (name) values(?) ";
 $q = $pdo->prepare($sql);
 $q->execute(array($name));

在 phpMyadmin 中我将排序规则设置为 utf8mb4_general_ci 但它仍然存储 Ele?phant

最佳答案

代替

$db = new PDO("mysql:host=".DBHOST.";port=8889;dbname=".DBNAME, DBUSER, DBPASS); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db -> exec("设置名称 utf8");

执行此 1 行: $db = new PDO("mysql:host=".DBHOST.";port=8889;dbname=".DBNAME.';charset=utf8mb4', DBUSER, DBPASS,array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 还要注意我是如何将它从 utf8 更改为 utf8mb4 的。

quote My collat​​ion is utf8_general_ci. - 最好的猜测,这就是你的问题(连同错误的连接字符集)。看,mysql的utf8并不是真正的utf8,而是一个弱命名的子集,而真正的utf8在MySQL中的名字是utf8mb4。一个可能不支持 字符的子集。一直运行 utf8mb4/utf8mb4_unicode_ci ,你应该不会遇到这个问题。此外,如果将来您希望 MySQL 在无法插入数据时抛出错误而不是破坏数据,请启用 STRICT_ALL_TABLES sql_mode。 (然后你会得到一个异常,而不是 mysql 存储你的字符串的损坏版本)

(这对 MariaDB 也是如此,它从它派生的 MySQL 源代码中继承了这种脑损伤)

关于php - 如何强制 mySQL 数据库存储这个特殊字符 : ╠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45234884/

相关文章:

php - 对于多服务器数据库系统,我们应该使用什么连接类型(mysql_connect、mysql_pconnect、PDO)?

PHP PDO 如何只保留一个 MYSQL 连接

php - 我使用哪种方法获取每台计算机的 ip 地址

php - Laravel 查询构建器条件与当前查询使用何时

mysql - 如何联合并获得三个表的总和

mysql - 拉取组中特定列的最大值的mysql行

php - 可恢复的 fatal error : Object of class PDOStatement could not be converted to string in - index. php 第 23 行

php - 如何从 WooCommerce 的购物车页面中删除数量

php - Mysql_num_rows() 问题

mysql - 累计和的 where 子句如何工作?