php - 将 scandic 字母插入数据库时​​出错

标签 php mysql sql-insert collation

我正在尝试将包含 scandic 字母的网址插入到我的数据库中,例如:

ÄÖäöÅå

我正在使用:

  • Opensuse 13.2 64 位 Linux 和 MariaDB。
  • MySQL服务器版本:5.5.44-MariaDB openSUSE包
  • PHP 版本为 5.4.20

当我尝试插入时,我收到此错误消息:

Incorrect string value: '\xC4HK\xD6.

此查询确认字符集和排序规则设置正确:

if (mysql_query("SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci")) {
    echo "Character set OK !";
}

我的 MySQL 查询适用于除包含 scandic 字母的 URL 之外的所有内容:

if (mysql_query("INSERT INTO `table` (`address`) VALUES ('$URL')")){
    $insertCount++;
    echo "<br> insertcount = ".$insertCount."<br>";
} else {
    echo "MySQLerror = ".mysql_error()."<br>"; // Show MySQLerror

这是来自 MariaDB 的 MySQL 信息,显示所有内容都设置为 utf8mb4 :

MariaDB [(none)]> 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   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+
10 rows in set (0,00 sec)

如何正确插入 scandic 字母?


编辑

@Monty:这些是我的数据库设置:

MariaDB [(none)]> show variables like '%colla%';
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_unicode_ci |
| collation_database   | utf8mb4_unicode_ci |
| collation_server     | utf8mb4_unicode_ci |
+----------------------+--------------------+
3 rows in set (0,00 sec)

MariaDB [(none)]> show variables like '%charac%';
+--------------------------+------------------------------+
| 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     | utf8mb4                      |
| character_set_system     | utf8                         |
| character_sets_dir       | /usr/share/mariadb/charsets/ |
+--------------------------+------------------------------+
8 rows in set (0,00 sec)

MariaDB [(none)]> 

编辑

@Rick James:这是我得到的:

MariaDB [db]> SHOW CREATE TABLE table; +--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | table | CREATE TABLE <code>table</code> ( <code>addr</code> varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL, PRIMARY KEY (<code>addr</code>), UNIQUE KEY <code>addr</code> (<code>addr</code>) ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='List' | +--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0,00 sec)

MariaDB [db]>

最佳答案

试试这个

验证存储数据的表是否具有 utf8 字符集:

SELECT
  `tables`.`TABLE_NAME`,
  `collations`.`character_set_name`
FROM
  `information_schema`.`TABLES` AS `tables`,
  `information_schema`.`COLLATION_CHARACTER_SET_APPLICABILITY` AS `collations`
WHERE
  `tables`.`table_schema` = DATABASE()
  AND `collations`.`collation_name` = `tables`.`table_collation`
;

检查你的数据库设置:

show variables like '%colla%';
show variables like '%charac%';

把utf-8改成utf8_general_ci

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

关于php - 将 scandic 字母插入数据库时​​出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32635504/

相关文章:

mysql - 将 'b' 文字放在非位值之前时如何处理 MySQL WorkBench bit(1) 错误?

php - mysql 创建一个新行而不是更新现有行

c# - SQL 脚本数据中的关键字在以编程方式执行时导致问题 - C#

php - 如何从 php 中的 mysql 日期时间字段中获取平均天数?

php - SUPEE 7405 补丁后上传文件的 chmod 640

php - 简单的多用户选择/选项

php - PDO 绑定(bind)问题

mysql - 在 CakePHP 中查询大型 i18n 表很慢

php - easyphp 13.1 中的 mysql 意外结束

php - 带位置占位符的 ON DUPLICATE KEY UPDATE 的语法