【Mysql】關於mysql存入emoji表情的問題
1.測試插入指令碼
在utf8的背景下
若線上修改字符集
修改配置檔案重啟資料庫
再轉換表
檢視資料
mysql> select * from testtab;
+-----------+
| contents |
+-----------+
| |
| |
| ????hello |
| ?hello | ---這條應該是正常的,四個?的應該是亂碼
+-----------+
注意:這樣是對的。
說下前提,utf8mb4和utf8的區別就是utf8才用3位位元組碼儲存資料,而utf8mb4用4位位元組碼儲存資料。
emoji表情是4位位元組碼透過前段轉義出來的,它本身是不可讀的字元,所以在資料庫客戶端中會顯示“?”。
在前端支援emoji的地方就會顯示emoji表情。
如果想在utf8的背景下插入emoji表情,得修改配置檔案,重啟資料庫啊!
參考:
http://blog.csdn.net/dqchouyang/article/details/51473544
-----姜成堯
https://mp.weixin.qq.com/s/VWVKy16gMJ_kFeICsyMiVw ---老葉茶館
http://mp.weixin.qq.com/s/HjzVoWe1fky0VfzhHi8uCg ----ACUMG mysql使用utf8mb4 經驗吐血總結
-
<?php
-
$conn = mysql_connect("127.0.0.1","root","ESBecs00!@#") or die ("wrong!");
-
$sel=mysql_select_db("test",$conn);
-
$contents = <<<EOT
-
"\ud83d\udca5"
-
EOT;
-
-
$contents = json_decode($contents). "hello";
-
echo $contents, "\t\n";
-
-
$sql="insert into testtab (`contents`) VALUES('$contents')";
-
-
-
for($i = 0;$i<1;$i++)
-
{
-
$que=mysql_query($sql,$conn);
-
while ($row = mysql_fetch_assoc($que)) {
-
var_dump($row);
-
}
-
-
}
-
-
-
mysql_close($conn);
-
-
- ?>
在utf8的背景下
-
資料庫端字符集為
-
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
-
+--------------------------+-----------------+
-
| Variable_name | Value |
-
+--------------------------+-----------------+
-
| character_set_client | utf8 |
-
| character_set_connection | utf8 |
-
| character_set_database | utf8 |
-
| character_set_filesystem | binary |
-
| character_set_results | utf8 |
-
| character_set_server | utf8 |
-
| character_set_system | utf8 |
-
| collation_connection | utf8_general_ci |
-
| collation_database | utf8_unicode_ci |
-
| collation_server | utf8_unicode_ci |
- +--------------------------+-----------------+
-
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
-
表字符集編碼為 -
mysql> show create table testtab\G;
-
*************************** 1. row ***************************
-
Table: testtab
-
Create Table: CREATE TABLE `testtab` (
-
`contents` text
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8
- 1 row in set (0.00 sec)
-
[root@host-192-168-1-56 ~]# php test.php
- hello
-
檢查資料
-
MySQL [test]> select * from testtab;
+----------+
| contents |
+----------+
| |
| |
+----------+
- 空字串 有時會報這種錯: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1
-
MySQL [test]> select * from testtab;
-
執行指令碼插入資料
若線上修改字符集
-
mysql> ALTER TABLE testtab CONVERT TO CHARACTER SET utf8mb4;
-
Query OK, 0 rows affected (0.34 sec)
-
Records: 0 Duplicates: 0 Warnings: 0
-
-
mysql> alter table testtab modify column `contents` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
Query OK, 0 rows affected (0.36 sec)
- Records: 0 Duplicates: 0 Warnings: 0
-
mysql> show create table testtab\G;
*************************** 1. row ***************************
Table: testtab
Create Table: CREATE TABLE `testtab` (
`contents` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)
執行插入指令碼
檢查資料
MySQL [test]> select * from testtab;
+-----------+
| contents |
+-----------+
| |
| |
| ????hello | --插進去,因為沒有前端測試,不知道是亂碼還是正常的
+-----------+
3 rows in set (0.00 sec)
*************************** 1. row ***************************
Table: testtab
Create Table: CREATE TABLE `testtab` (
`contents` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)
執行插入指令碼
檢查資料
MySQL [test]> select * from testtab;
+-----------+
| contents |
+-----------+
| |
| |
| ????hello | --插進去,因為沒有前端測試,不知道是亂碼還是正常的
+-----------+
3 rows in set (0.00 sec)
修改配置檔案重啟資料庫
-
[client]
-
port=3306
-
socket=/var/lib/mysql/mysql.sock
-
default-character-set=utf8mb4
-
[mysqld]
-
character_set_server = utf8mb4
- collation-server = utf8mb4_unicode_ci
-
MySQL [test]> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8_general_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
再轉換表
-
mysql> ALTER TABLE testtab CONVERT TO CHARACTER SET utf8mb4;
-
Query OK, 0 rows affected (0.34 sec)
-
Records: 0 Duplicates: 0 Warnings: 0
-
-
mysql> alter table testtab modify column `contents` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
Query OK, 0 rows affected (0.36 sec)
- Records: 0 Duplicates: 0 Warnings: 0
-
檢視資料
mysql> select * from testtab;
+-----------+
| contents |
+-----------+
| |
| |
| ????hello |
| ?hello | ---這條應該是正常的,四個?的應該是亂碼
+-----------+
注意:這樣是對的。
說下前提,utf8mb4和utf8的區別就是utf8才用3位位元組碼儲存資料,而utf8mb4用4位位元組碼儲存資料。
emoji表情是4位位元組碼透過前段轉義出來的,它本身是不可讀的字元,所以在資料庫客戶端中會顯示“?”。
在前端支援emoji的地方就會顯示emoji表情。
如果想在utf8的背景下插入emoji表情,得修改配置檔案,重啟資料庫啊!
參考:
http://blog.csdn.net/dqchouyang/article/details/51473544
-----姜成堯
https://mp.weixin.qq.com/s/VWVKy16gMJ_kFeICsyMiVw ---老葉茶館
http://mp.weixin.qq.com/s/HjzVoWe1fky0VfzhHi8uCg ----ACUMG mysql使用utf8mb4 經驗吐血總結
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2123781/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- php+mysql 解決emoji表情符號問題PHPMySql符號
- mysql 儲存emoji表情MySql
- MySQL儲存 emoji 表情MySql
- MYSQL資料庫與Emoji表情的故事MySql資料庫
- emoji等表情符號存mysql的方法符號MySql
- 關於mysql連線的問題MySql
- Mysql伺服器無法存emoji表情的解決方案MySql伺服器
- MySQL 04-EMOJI 表情與 UTF8MB4 的故事MySql
- 關於mysql5.6 的排序問題.MySql排序
- MySQL 資料庫儲存 Emoji 表情及特殊符號MySql資料庫符號
- 【Mysql】關於一個mysql的坑比時區問題MySql
- MySQL關於事務常見的問題MySql
- 關於 mysql 中的 rand () 查詢問題MySql
- 關於mysql的Too many connections問題MySql
- 【BUG記錄】MySQL插入Emoji表情報錯"Incorrect string value"MySql
- 關於 Homestead 連線 MySQL 問題MySql
- 關於mysql中limit最佳化的問題MySqlMIT
- Emoji表情符號錄入MySQL資料庫報錯的解決方案符號MySql資料庫
- 關於幾個MySQL環境問題的對比MySql
- 關於mysql和jsp的中文問題~謝謝MySqlJS
- 關於 mysql相關的jar影響了tomcat 的問題MySqlJARTomcat
- Mysql支援emoji 表情符號 升級編碼為UTF8MB4MySql符號
- Java emoji持久化mysqlJava持久化MySql
- 阿里雲RDS for MySQL使用utf8mb4編碼儲存Emoji表情阿里MySql
- mysql相關問題總結MySql
- 關於mysql字元和數字型別轉換的問題研究MySql字元型別
- 從Access轉到MySql以後遇到的關於null問題MySqlNull
- 關於Mysql 4.1語言問題的完美解決方法(轉)MySql
- MySQL中鎖的相關問題DTQUMySql
- 前端如何處理emoji表情前端
- PHP中處理emoji表情PHP
- 在 Laravel 中使用 emoji 表情Laravel
- 關於MySQLMySql
- 基於mysql資料庫 關於sql優化的一些問題MySql資料庫優化
- 【MYSQL】一個關於Innodb儲存引擎表的加鎖問題MySql儲存引擎
- MySQL主從複製中關於AUTO_INCREMENT的奇怪問題MySqlREM
- 最近積累的幾個關於 PHP 類與 MySQL 的小問題PHPMySql
- 關於 mysql 中的 select * from table_a,table_b 的問題MySql