php - mysql插入时截断的字符串

标签 php mysql codeigniter utf-8 character-encoding

<分区>

我花了一整天的时间想弄明白这个问题,希望你能帮忙

问题:将“Cosío”插入 mysql 数据库

发生的事情是字符串在重音处被截断,因此它只插入“Cos”

如果我执行以下操作:echo mb_detect_encoding($_POS['name'], "auto");它显示 UTF-8

在这里和那里阅读一些帖子,我听从了一些建议并做了以下事情

mysql database : collation = utf8_general_ci
mysql table: collation = utf8_general_ci
mysql field: collation = utf8_general_ci

我正在使用 codeigniter 框架,我的数据库连接如下:

  $active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => '',
    'database' => 'codeigniter',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => false,
    'failover' => array(),
    'save_queries' => TRUE
);

在 apache 配置上我还添加了 AddDefaultCharset utf-8

还声明了 html 标签 <meta charset="UTF-8">

我已经阅读并阅读了几篇 SO 帖子,但没有成功。 我错过了什么?

更新: 我越来越接近问题了,在执行插入查询之前,我正在像这样清理所有发布变量。

$ready_for_insert = ucwords(strtolower(filter_var($_POST['name'], FILTER_SANITIZE_STRING)));

如果我删除过滤器清理字符串,一切正常。我这样做是为了清除任何标签或恶意输入的字符串,我不知道是否应该删除它。

最佳答案

MySQL 的 utf-8 编码不支持完整的 Unicode。

在您的示例 Cosío 中,í 在保存到数据库之前不受支持和正确编码。所以那个 unicode 之后的字符被 MySQL 剥离了。只有Cos会被保存在数据库中。

如果你想支持完整的unicodes,你必须将编码切换为utf8mb4

这可以按如下方式完成。

For each database:

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

For each table:

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

For each column:

ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

(Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a VARCHAR column.)

请引用this link了解更多信息

关于php - mysql插入时截断的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40144131/

相关文章:

php - 尝试使用 PHP 将数据库中的图像插入新闻博客每个条目上方

PHP fatal error : Call to a member function item() on a non-object

mysql - 二进制与普通文本匹配的性能

php - codeigniter 从库中加载库?

javascript - ng-click 在 Angular js 中显示数据

mysql - 将日期从 codeigniter 传递到 mysql 存储过程

php - Base64 编码的图像未通过 POST 发送

php - Gmail从php mail()函数发送合法邮件到垃圾邮件文件夹

php - 从 webroot 访问 cakephp session 变量

mysql - 为什么在将 group by 与左联接一起使用时会出现错误?