Saya menggunakan MySQL 5.5.21, dan mencoba memasukkan karakter wajah smiley '\ xF0 \ x9F \ x98 \ x8A'. Tetapi untuk kehidupan saya, saya tidak tahu bagaimana melakukannya.
Menurut berbagai forum yang telah saya baca, itu mungkin. Tetapi setiap kali saya mencobanya, data akan terpotong.
mysql> INSERT INTO hour ( `title`, `content`, `guid` , `published` , `lang` , `type` ,
`indegree` , `lon` , `lat` , `state` , `country` , `hour` )
VALUES ( "title" , "content 😊 content" , "guid" , 1, 1,
"WEBLOG", 1, 1, 1, "state" , "country" , 1 );
Query OK, 1 row affected, 2 warnings (0.00 sec)
mysql> show warnings;
+---------+------+-------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+-------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9F\x98\x8A ...' for column 'content' at row 1 |
| Warning | 1265 | Data truncated for column 'published' at row 1 |
+---------+------+-------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> select LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 687302 |
+------------------+
1 row in set (0.00 sec)
mysql> select * from hour where id = 687302;
+--------+-------+----------+------+---------------------+
| id | title | content | guid | published |
+--------+-------+----------+------+---------------------+
| 687302 | title | content | guid | 0000-00-00 00:00:00 |
+--------+-------+----------+------+---------------------+
1 row in set (0.00 sec)
Tapi definisi tabel saya adalah sebagai berikut.
CREATE TABLE `hour` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`title` varchar(255) CHARACTER SET utf8 NOT NULL,
`content` text CHARACTER SET utf8 NOT NULL,
`guid` varchar(255) CHARACTER SET utf8 NOT NULL,
`published` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`lang` tinyint(3) unsigned NOT NULL,
`type` enum('WEBLOG','MICROBLOG') CHARACTER SET utf8 DEFAULT NULL,
`indegree` int(4) unsigned NOT NULL,
`lon` float DEFAULT NULL,
`lat` float DEFAULT NULL,
`state` varchar(50) CHARACTER SET utf8 DEFAULT '',
`country` varchar(50) CHARACTER SET utf8 DEFAULT '',
`hour` int(2) DEFAULT NULL,
`gender` enum('MALE','FEMALE') CHARACTER SET utf8 DEFAULT NULL,
`time_zone` varchar(45) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MEMORY AUTO_INCREMENT=687560 DEFAULT CHARSET=utf8mb4 KEY_BLOCK_SIZE=288
Orang dapat melihat bahwa saya menggunakan CHARSET = utf8mb4. Tentunya ini mengoreksi masalah seputar penggunaan karakter multi-byte?
Ok, jadi saya tidak memperhatikan:
`content` text CHARACTER SET utf8 NOT NULL,
Saya sudah memperbaikinya sekarang, tetapi masih mendapatkan hasil yang funky.
CREATE TABLE `hourtmp` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`title` varchar(255) CHARACTER SET utf8 NOT NULL,
`content` text NOT NULL,
`guid` varchar(255) CHARACTER SET utf8 NOT NULL,
`published` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`lang` tinyint(3) unsigned NOT NULL,
`type` enum('WEBLOG','MICROBLOG') CHARACTER SET utf8 DEFAULT NULL,
`indegree` int(4) unsigned NOT NULL,
`lon` float DEFAULT NULL,
`lat` float DEFAULT NULL,
`state` varchar(50) CHARACTER SET utf8 DEFAULT '',
`country` varchar(50) CHARACTER SET utf8 DEFAULT '',
`hour` int(2) DEFAULT NULL,
`gender` enum('MALE','FEMALE') CHARACTER SET utf8 DEFAULT NULL,
`time_zone` varchar(45) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MEMORY AUTO_INCREMENT=687563 DEFAULT CHARSET=utf8mb4 KEY_BLOCK_SIZE=288 |
mysql> INSERT INTO hourtmp ( `title`, `content`, `guid` , `published` , `lang` , `type` , `indegree` ,
`lon` , `lat` , `state` , `country` , `hour` ) VALUES ( "title" , "content 😊 content" ,
"guid" , 1, 1, "WEBLOG", 1, 1, 1, "state" , "country" , 1 );
Query OK, 1 row affected, 2 warnings (0.00 sec)
mysql> show warnings;
| Level | Code | Message |
| Warning | 1366 | Incorrect string value: '\xF0\x9F\x98\x8A ...' for column 'content' at row 1 |
| Warning | 1265 | Data truncated for column 'published' at row 1 |
2 rows in set (0.00 sec)
mysql> select * from hourtmp;
+--------+-------+-----------------------+
| id | title | content |
+--------+-------+-----------------------+
| 687560 | title | content ???? content |
| 687561 | title | content ???? content |
+--------+-------+-----------------------+
mysql
character-set
sql-injection
Bryan Hunt
sumber
sumber
uft8
untukTEXT
bidang jugaJawaban:
Saya baru-baru ini menulis panduan terperinci tentang cara beralih dari MySQL
utf8
keutf8mb4
. Jika Anda mengikuti langkah-langkah di sana, semuanya akan berfungsi dengan benar. Berikut adalah tautan langsung ke setiap langkah individu dalam proses:Saya menduga bahwa masalah Anda dapat diselesaikan dengan mengikuti langkah 5. Semoga ini bisa membantu!
sumber
mysql
dari Node, dan perlu menentukancharset: 'utf8mb4'
dalamcreateConnection()
panggilan saya , jika tidak memasukkan karakter UTF8 yang benar masih gagal denganIncorrect string value
kesalahan, bahkan setelah mengonversi tabel dan kolom keutf8mb4
kumpulan dan susunan karakter. Saya berharap detail tingkat konfigurasi klien Anda di Langkah 5 akan memiliki efek yang sama.Lakukan hal-hal berikut:
Set basis data charset ke utf8mb4
Atur charset kolom ke utf8mb4
seperti permintaan di bawah ini:
sumber