MariaDB problemen met UTF-8
Hallo,
Ik probeer een database te importeren in MariaDB, maar dit geeft een
foutmelding:
-----
ERROR 1366 (22007) at line 139029: Incorrect string value:
'\xF0\x9F\x91\x89 S...' for column `edagenda`.`wp_posts`.`post_content`
at row 1
-----
'\xF0\x9F\x91\x89' blijkt een 4-bit UTF-8 teken, het blijkt een handje
te zijn: '👉'. Ik blijk erop te kunnen zoeken en vervangen, maar dan
lukt het importeren nog steeds niet en is er weer een ander teken met
dit soort problemen.
Als ik in de SQL code kijk dan wordt "utf8mb4_unicode_520_ci" gebruikt
bij het aanmaken van de tabellen. Ik heb dit met zoek en vervang al
geprobeerd te vervangen door 'utf8mb4_general_ci' maar dat helpt niet.
Zoiets is het dus na zoek en vervang:
----
CREATE TABLE `wp_posts` (
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`post_author` bigint(20) unsigned NOT NULL DEFAULT '0',
`post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_content` longtext COLLATE utf8mb4_general_ci NOT NULL,
`post_title` text COLLATE utf8mb4_general_ci NOT NULL,
`post_excerpt` text COLLATE utf8mb4_general_ci NOT NULL,
`post_status` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT
'publish',
`comment_status` varchar(20) COLLATE utf8mb4_general_ci NOT NULL
DEFAULT 'open',
`ping_status` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT
'open',
`post_password` varchar(255) COLLATE utf8mb4_general_ci NOT NULL
DEFAULT '',
`post_name` varchar(200) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
`to_ping` text COLLATE utf8mb4_general_ci NOT NULL,
`pinged` text COLLATE utf8mb4_general_ci NOT NULL,
`post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_content_filtered` longtext COLLATE utf8mb4_general_ci NOT NULL,
`post_parent` bigint(20) unsigned NOT NULL DEFAULT '0',
`guid` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
`menu_order` int(11) NOT NULL DEFAULT '0',
`post_type` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT
'post',
`post_mime_type` varchar(100) COLLATE utf8mb4_general_ci NOT NULL
DEFAULT '',
`comment_count` bigint(20) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`),
KEY `post_name` (`post_name`(191)),
KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`),
KEY `post_parent` (`post_parent`),
KEY `post_author` (`post_author`)
) ENGINE=InnoDB AUTO_INCREMENT=9000 DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci;
---------
Ik heb wat testjes gedaan zoals hier voorgesteld:
https://sebhastian.com/mysql-incorrect-string-value/
Maar als ik een tabel test aanmaak dan doet-ie dat goed:
---
MariaDB [edagenda]> CREATE TABLE `Test` (
`names` varchar(255)
)
MariaDB [edagenda]> SHOW CREATE TABLE Test \G
Table: Test
Create Table: CREATE TABLE `Test` (
`names` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
1 row in set (0,000 sec)
-----
Echter, als ik dan een speciaal teken invoer gaat het niet goed:
----
MariaDB [edagenda]> INSERT INTO Test VALUES('𓁴');
ERROR 1366 (22007): Incorrect string value: '\xF0\x93\x81\xB4' for
column `edagenda`.`Test`.`names` at row 1
MariaDB [edagenda]> INSERT INTO Test VALUES('a');
Query OK, 1 row affected (0,004 sec)
----
Iemand een idee?
Groet,
Paul
--
Paul van der Vlis Linux systeembeheer Groningen
https://vandervlis.nl/
Reply to: