Я пытаюсь вставить эмодзи в мой mysql. но он отображается как ? -> "??".
Это то, что я делал до сих пор.
Моя ASPX-страница
<meta charset="utf-8">
Моя база данных Для таблицы установлено значение:
utf8mb4_unicode_ci
Для столбца моей базы данных установлено значение:
utf8mb4_unicode_ci
My MySQL -connectionString:
server=mysql.server.com;uid=testuser;pwd=1234;database=testdb;convert zero datetime=True;charset=utf8mb4;
Однако, если я вставлять эмодзи напрямую с помощью sql -отношения в phpMyAdmin, оно прекрасно работает
INSERT INTO Notification (id, headline, notificationText, sentDate)
VALUES (null, 'test', '?', NOW())
Но когда я пытаюсь вставить код (. NET C#), оно отображается как "??".
private void EmojiQueryTester()
{
string strSql = "INSERT INTO Notification (id, headline, notificationText, sentDate) " +
" VALUES (null, 'test', '?', NOW())";
string strConnectionString = "mysql.server.com;uid=testuser;pwd=1234;database=testdb;" +
"convert zero datetime=True;charset=utf8mb4";
using (var mySqlConnection = new MySqlConnection(strConnectionString))
{
mySqlConnection.Open();
var mySqlCommand = new MySqlCommand(strSql, mySqlConnection);
mySqlCommand.ExecuteNonQuery();
}
}
![enter image description here](https://i.stack.imgur.com/z8MQy.png)
id = 27 вставлено моим кодом. NET и id = 28 вставлено phpMyAdmin
Я также пытался вставить другие символы в следующем порядке, но все же не повезло:
U+1F601 | \xF0\x9F\x98\x81 |
ПОКАЗАТЬ СОЗДАНИЕ ТАБЛИЦЫ Уведомление
CREATE TABLE `Notification` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`headline` varchar(255) COLLATE utf8mb4_bin NOT NULL,
`notificationText` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
`sentDate` date NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
![enter image description here](https://i.stack.imgur.com/2Lkwt.png)
SELECT notificationText, HEX(notificationText) FROM Notification
Это запрос моих кодировок
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'
![enter image description here](https://i.stack.imgur.com/8ChYZ.png)
Распечатать из HEX-строка
public static string ConvertStringToHex(String input, System.Text.Encoding encoding)
{
Byte[] stringBytes = encoding.GetBytes(input);
StringBuilder sbBytes = new StringBuilder(stringBytes.Length * 2);
foreach (byte b in stringBytes)
{
sbBytes.AppendFormat("{0:X2}", b);
}
return sbBytes.ToString();
}
protected void Page_Load(object sender, EventArgs e)
{
string notification = "?";
DBTool dbT = new DBTool();
dbT.tester(notification);
Response.Write(ConvertStringToHex(notification, Encoding.UTF8));
}
выводится в браузере: F09F9880
dbo.HEX (уведомление): 3F3F * 105 9 *
dbo.notification: ??
Таким образом, вывод в браузере, по сути, является заглавным HEX для смайлика, однако в dbo.HEX (уведомлении) он преобразуется в "3F3F". Так что в основном он пишет в ASCII, а не в UTF8, как следует.