我正在尝试将网址插入包含scandic字母的数据库,例如:
ÄÖäöÅå
我正在使用:
当我尝试插入时,收到此错误消息:
字符串值不正确:'\ 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)]>
MariaDB [db]> SHOW CREATE TABLE table;
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| table | CREATE TABLE
table
(
addr
varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (addr
),
UNIQUE KEY addr
(addr
)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='List' |
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)
table
addr
答案 0 :(得分:0)
试试这个
验证存储数据的表是否具有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;
答案 1 :(得分:0)
C4和D6是latin1 hex。
请SHOW CREATE TABLE
查看相关列的CHARACTER SET
内容。我怀疑它不正确latin1
。
而且,是的,您必须从mysql_*
界面切换。