當我將某些字符保存到我的MariaDB數據庫中時,它們將以2至4個字符的字符串形式存儲。例如,作爲â„¢
被保存在數據庫中。保存字符集和發送數據時使用UTF8保存奇怪字符的數據庫
從HTML頁面中包含我
<meta charset="utf-8">
形式head
當我檢查發送到服務器的頭,它顯示
Content-Type:text/html; charset=UTF-8
的PHP文件處理表單數據有
$mysqli->set_charset('utf8');
我已經將數據庫和錶轉換爲UTF8,這樣做:
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
檢查中INFORMATION_SCHEMA表的數據庫和表的詳細信息,我可以看到數據庫和表的字符集是UTF8
和默認排序規則名稱utf8_general_ci
。
但是錯誤編碼的字符是仍然被保存到數據庫。
我正在查看與終端的表數據,所以應該沒有問題與查看方的編碼。
我還缺少什麼?
== ==編輯
在迴應@裏克的評論 - SHOW CREATE TABLE search_templates;
:
search_templates | CREATE TABLE `search_templates` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified` timestamp NULL DEFAULT NULL,
`template` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`space` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`url` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`secure` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
和SELECT title, HEX(title) FROM search_templates WHERE id = 25;
:
+-----------------------+--------------------------------------------+
| title | HEX(title) |
+-----------------------+--------------------------------------------+
| Kiddicare abc â„¢ | 4B69646469636172652061626320C3A2E2809EC2A2 |
+-----------------------+--------------------------------------------+
當至十六進制到文本轉換器通過它顯示:Kiddicare abc â„¢
。
所以這些字符被這樣保存到數據庫,這是否使問題更清楚?
== ==編輯
在建議從@rick(與新加入的數據,如前面標題欄得到了擦拭):
SELECT title, CONVERT(BINARY(CONVERT(CONVERT(UNHEX(title) USING utf8) USING latin1)) USING utf8) FROM search_templates LIMIT 3;
- >
+--------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+
| title | CONVERT(BINARY(CONVERT(CONVERT(UNHEX(title) USING utf8) USING latin1)) USING utf8) |
+--------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+
| Kids' Games & Toys » Toy Shop » Toys R Us | NULL |
| Kiddicare - Pushchairs | Prams | Car Seats | Baby Equipment | Online Baby Shop | NULL |
| Kiddicare â„¢ | NULL |
+--------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+
爲了達到它的底部:'SHOW CREATE TABLE'和'SELECT col,HEX(col)FROM table where ...' –
更新了我的問題 - 至少我現在知道它正在轉換之前被保存到數據庫,但我還沒有確保在進入數據庫之前將所有內容都設置爲UTF8? – Fisu
哦,如果你可以重新添加數據,那麼讓我們看看如何在所有步驟中成爲「utf8」。開始學習http://stackoverflow.com/questions/279170/utf-8-all-the-way-through/279279#279279 –